Như đã nhận xét, công cụ tốt nhất xung quanh là sp_whoIsActive của Adam Machanic . Nó có thể được sử dụng theo nhiều cách, để xem những gì đang chạy tại thời điểm bạn khởi chạy tập lệnh hoặc bạn có thể chạy nó trong các vòng lặp để theo dõi một số hành động cụ thể, ví dụ như các truy vấn chậm.
Để chạy trong một vòng lặp, hãy xem tại đây: Cách ghi nhật ký hoạt động bằng cách sử dụng sp_whoisactive trong một vòng lặp
Để phát hiện các truy vấn chậm: Cách sử dụng sp_WhoIsActive để tìm các truy vấn máy chủ SQL chậm
Bạn có thể trực tiếp sử dụng DMV để nhận các truy vấn chậm nhất và hành động từ đó. Kiểm tra các truy vấn chẩn đoán của Glenn Berry .
Và cuối cùng bạn có thể sử dụng truy vấn này để tìm hầu hết các truy vấn tốn thời gian. Bạn có thể chơi xung quanh với dm_exec_query_stats để thêm nhiều dữ liệu hơn hoặc tham gia với những người khác để có thêm thông tin. Xin lưu ý rằng dmv sẽ bị xóa và được làm mới mỗi khi máy chủ được khởi động lại.
SELECT creation_time
,last_execution_time
,total_physical_reads
,total_logical_reads
,total_logical_writes
, execution_count
, total_worker_time
, total_elapsed_time
, total_elapsed_time / execution_count avg_elapsed_time
,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY total_elapsed_time / execution_count DESC;
CHỈNH SỬA
Một tùy chọn mới đã có sẵn từ lúc nào đó, First Reponder Kit . Là một tập hợp các tập lệnh, được cung cấp miễn phí theo giấy phép MIT bởi nhóm BrentOzar, sẽ giúp ích cho các nhiệm vụ khác nhau, bao gồm cả tập lệnh được OP yêu cầu. Chủ yếu sp_BlitzFirst và sp_BlitzWho kịch bản cho trường hợp này.