2010-08-17 18 views
8

Tôi đang cố gắng tìm ra cách để xác định "phiên bản" của SP được gọi nhiều nhất. Tôi có một SP được gọi với một loạt các tham số khác nhau. Tôi biết rằng SP đang gây ra một số vấn đề và cố gắng chỉ ra vấn đề. Bên cạnh việc chụp các cuộc gọi đến SP và tự sàng lọc thông qua các kết quả, có thể sử dụng profiler để nhóm các cuộc gọi SP bằng các tham số được cung cấp không?Cách nhanh nhất để xác định biến thể Thủ tục lưu trữ được sử dụng nhiều nhất trong SQL Server 2005

Tôi không phải là DB (A/E), chỉ là một nhà phát triển web, do đó, bất kỳ gợi ý/điểm nào trong đúng hướng sẽ hữu ích. Cảm ơn!

EDIT: Biên dịch lại SP không giúp được gì nhiều.

+0

thể trùng lặp của [Hầu hết thực thi Stored Procedure?] (Http://stackoverflow.com/questions/1942726/most-executed-stored-procedure) –

+1

Tôi không tin điều này sẽ bị từ chối là dup , bởi vì trong trường hợp này, họ đang tìm kiếm các biến thể trong các tham số cho cùng một sproc. Các câu hỏi khác là về sproc (s) thường xuyên nhất được gọi là. Ở đây, chúng ta biết sproc nào cần chú ý. Đó là các thông số khác nhau là vấn đề. Và đó đòi hỏi một cách tiếp cận xử lý sự cố khác nhau. – DOK

Trả lời

14

này sẽ cung cấp cho bạn 50 procs đầu sử dụng nhiều nhất và những điều khoản trong procs, từ đây: Display the 50 most used stored procedures in SQL Server

SELECT TOP 50 * FROM(SELECT COALESCE(OBJECT_NAME(s2.objectid),'Ad-Hoc') AS ProcName, 
    execution_count,s2.objectid, 
    (SELECT TOP 1 SUBSTRING(s2.TEXT,statement_start_offset/2+1 , 
     ((CASE WHEN statement_end_offset = -1 
    THEN (LEN(CONVERT(NVARCHAR(MAX),s2.TEXT)) * 2) 
ELSE statement_end_offset END)- statement_start_offset)/2+1)) AS sql_statement, 
     last_execution_time 
FROM sys.dm_exec_query_stats AS s1 
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2) x 
WHERE sql_statement NOT like 'SELECT * FROM(SELECT coalesce(object_name(s2.objectid)%' 
and OBJECTPROPERTYEX(x.objectid,'IsProcedure') = 1 
and exists (SELECT 1 FROM sys.procedures s 
WHERE s.is_ms_shipped = 0 
and s.name = x.ProcName) 
ORDER BY execution_count DESC 

Visit liên kết để lấy truy vấn cho tên proc chỉ, nhưng tôi nghĩ rằng đây là một truy vấn tốt hơn vì nó cung cấp cho bạn các câu lệnh trong các procs cũng

+0

oooh thông minh. Tôi không bao giờ nghĩ đến việc tham gia định nghĩa cho truy vấn được sử dụng nhiều nhất – gbn

+0

Tôi chắc chắn sẽ thử điều này. –

+0

Làm thế nào để có được cơ sở dữ liệu được chỉ định? –

0

Nếu bạn biết SP nào gây ra vấn đề, bạn có thể chỉ cần ghi các thông số được truyền vào trong SP đó? Bạn có thể thiết lập một bảng với danh sách các tham số, sau đó đăng nhập chúng cùng với thời gian thực hiện thủ tục và sau đó truy vấn bảng đó để xem các tham số nào gây ra hiệu suất tồi tệ nhất.

1

Có vẻ như bạn chỉ cần có thể nắm bắt thông tin này trong một khoảng thời gian ngắn. Các sproc có thể được gọi là một số lượng lớn các lần trong thời gian đó, nhưng đó là một khoảng thời gian hữu hạn.

Nếu trường hợp đó xảy ra, có lẽ bạn có thể đăng nhập cuộc gọi sproc ở đâu đó? Nếu bạn có quyền kiểm soát mã sproc, bạn có thể thực hiện việc ghi nhật ký ở đó. Một cách tiếp cận sẽ là tạo một bảng đặc biệt cho mục đích này, thêm một INSERT vào bảng đó ở đầu hoặc cuối của sproc hiện có và chờ một số bản ghi tích lũy trong bảng.

Tùy thuộc vào chi tiết cụ thể, bạn có thể tạo cột trong bảng ghi nhật ký tùy chỉnh cho mỗi thông số sproc.

Sau đó, bạn sẽ có nhiều thông tin về việc sử dụng sproc, trong khoảng thời gian bạn thực hiện ghi nhật ký.

Với dữ liệu được tích lũy trong bảng, bạn có thể truy vấn để tìm các giá trị thông số thường xuyên nhất, người dùng hoặc ứng dụng hoặc trang web, v.v ... sẽ được tính vào thời gian bắt đầu và kết thúc cuộc gọi sproc. khác bạn đăng nhập.

Điều này sẽ không liên quan đến bất kỳ thay đổi nào đối với mã ứng dụng và nó có thể được loại bỏ hoàn toàn sau khi bạn đã hoàn tất khắc phục sự cố. Vì vậy, ngoài việc đạt được hiệu quả tất yếu của việc khai thác gỗ, giá của phương pháp này không cao.

Chỉnh sửa: Cách tiếp cận này sẽ là giải pháp thay thế cho người dùng thiếu quyền đặc biệt cần thiết để chạy truy vấn DMV trên bảng như sys.dm_exec_query_stats. Trong nhiều cửa hàng, nhận được các quyền như vậy - đặc biệt là trên cơ sở dữ liệu sản xuất - không khả thi đối với các nhà phát triển.

+0

Vâng, điều đó chắc chắn có thể hoạt động. Khi đặt câu hỏi, tôi chủ yếu suy nghĩ theo cách SQL Profiler để ghi lại mọi thứ. –

0

Tôi thích đoạn mã này để lấy lại và xem lại thống kê thực thi. và kế hoạch truy vấn được lưu trong bộ nhớ cache cho một thủ tục được lưu trữ đã cho. Trong Management Studio, bạn có thể nhấp vào XML được trả lại trong cột "query_plan" để xem phiên bản đồ họa của kế hoạch thực hiện.

SELECT qp.*,qs.*,st.text 
    FROM sys.dm_exec_query_stats qs 
     CROSS APPLY sys.dm_exec_sql_text(sql_handle) st 
     CROSS APPLY sys.dm_exec_query_plan(plan_handle) qp 
    WHERE st.objectid= object_id('YourStoredProcedureName') 
Các vấn đề liên quan