Theo dõi việc sử dụng thủ tục được lưu trữ


19

Bên cạnh việc sử dụng SQL Server Profiler, có cách nào để theo dõi các thủ tục được lưu trữ nào đang được sử dụng hay ít nhất là khi chúng được thực hiện lần cuối không?


4
Bạn luôn có thể nhìn vào bộ đệm kế hoạch. SQL Server không theo dõi nội dung này mãi mãi vì siêu dữ liệu nhanh chóng trở nên lớn và đắt đỏ.
JNK

Câu trả lời:


17

Bạn có thể nhìn vào bộ đệm của kế hoạch để có ý tưởng khá tốt về việc sử dụng Thủ tục được lưu trữ. Lấy truy vấn này, ví dụ:

select
    db_name(st.dbid) as database_name,
    object_name(st.objectid) as name,
    p.size_in_bytes / 1024 as size_in_kb,
    p.usecounts,
    st.text
from sys.dm_exec_cached_plans p
cross apply sys.dm_exec_sql_text(p.plan_handle) st
where p.objtype = 'proc'
and st.dbid = db_id('SomeDatabase')
order by p.usecounts desc

Điều này sẽ cung cấp cho bạn các usecountsthủ tục được lưu trữ được lưu trữ liên quan đến SomeDB.

Lưu ý: bộ đệm kế hoạch chứa các kế hoạch thực hiện. Việc duy trì các kế hoạch này có nhiều yếu tố liên quan. Trong khi điều này sẽ cung cấp cho bạn một ý tưởng tốt về những gì đang được sử dụng và tần suất, chắc chắn đó không phải là tổng số các thủ tục được lưu trữ và tần suất / thời gian chúng được thực thi.

Tham khảo BOL về Bộ đệm ẩn kế hoạch


4
Remeber điều này chỉ cho bạn biết sp đã được chạy khá gần đây và không cung cấp cho bạn thông tin nào về procs không có ở đây. Những thứ như procs đằng sau các báo cáo hàng quý được chạy không thường xuyên nhưng đang được sử dụng. Về cơ bản, điều này chỉ cung cấp cho bạn một danh sách để nghiên cứu trong các ứng dụng đánh vào db của bạn.
HLGEM

1
@HLGEM Chính xác. Tôi đã cố gắng làm rõ quan điểm đó trong câu trả lời của mình.
Thomas Stringer

Có thể làm điều này cho một phạm vi thời gian cụ thể? (ví dụ: ngày cuối cùng / tháng, v.v.)?
Jose Parra

Lưu ý rằng truy vấn này sẽ không trả về một hàng cho một thủ tục được lưu trữ đã bị thay đổi và không được thực hiện sau đó.
Axel2D

10

Bạn có thể xem cái này cũng như nó chứa thông tin last_execution_timecủa mọi thủ tục được lưu trữ.

    SELECT DB_NAME(database_id)
    ,OBJECT_NAME(object_id,database_id)
    ,cached_time
    ,last_execution_time
    ,execution_count
FROM sys.dm_exec_procedure_stats

Có cảnh báo cho tho này. Các số liệu thống kê này chỉ được lưu giữ kể từ lần thực hiện cơ sở dữ liệu cuối cùng. Tôi đang bận viết một công việc sẽ lưu trữ nó vào bảng mỗi ngày một lần.
earthling42

@ earthling42, bạn đã bao giờ viết một công việc lưu trữ nó vào một bảng hàng ngày chưa?
Alex Chung

@Alex Chung - tiếc là không bao giờ có được điều đó. Đã chuyển sang các dự án không phải MS-SQL ngay sau ngày đăng bài này. Không nên để khó tho? Tôi rất vui khi cố gắng làm việc với bạn nếu bạn quan tâm.
earthling42
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.