Thông báo về truy vấn chạy dài hoặc bế tắc trong SQL Server 2008 R2?


15

Tôi muốn biết liệu có cách nào để gửi thông báo về bế tắc không? Nếu vậy những truy vấn sẽ được yêu cầu. Tôi hiểu rằng SQL Server xử lý các bế tắc, tôi chỉ muốn thông tin về các truy vấn liên quan.

Tôi tìm thấy những điều sau đây để xác định các truy vấn chạy dà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  
where total_elapsed_time >= 300000000 --5 min
ORDER BY total_elapsed_time / execution_count DESC; 

Tôi muốn biết liệu ở trên có phải là cách đúng hay không, hoặc có cách nào tốt hơn để xác định xem có bất kỳ truy vấn nào mất nhiều thời gian hơn một khoảng thời gian cụ thể nói 5 phút như được hiển thị không?

Cảm ơn

Câu trả lời:


8

Với SQL 2008, có một tính năng mới mà bạn có thể sử dụng cho các khóa chết và hàng đợi chạy dài: các sự kiện mở rộng . Các sự kiện mở rộng là các đối tượng cấp thấp và tiêu thụ tài nguyên ít hơn nhiều so với các phương thức khác như lược tả / theo dõi, cảnh báo, v.v ...

Để sử dụng các sự kiện mở rộng với deadlockskiểm tra bài đăng này của Jonathan Kehayias , MVP máy chủ SQL.

Để sử dụng các sự kiện mở rộng để tìm long running queries, hãy xem bài viết chi tiết này của Pinal Dave , một MVP máy chủ SQL khác.


10

Bạn có thể định cấu hình cảnh báo cho cả hai điều này với SQL Agent. Tạo một cảnh báo mới và chọn loại "Thông báo điều kiện hiệu suất máy chủ SQL"

Đối với các truy vấn chạy dài, chọn Đối tượng "MSSQL $ InstanceName: Giao dịch" và Bộ đếm: Thời gian chạy giao dịch dài nhất. Định cấu hình các giá trị và các tùy chọn thông báo cảnh báo và bạn sẽ ổn.

Đối với các khóa chết, Đối tượng là "MSSQL $ InstanceName: Khóa" và Bộ đếm là "Số lượng bế tắc / giây"

Nếu bạn muốn kiểm soát chi tiết hơn về thông báo bế tắc, hãy kiểm tra điều này: http://www.sqlservercentral.com/articles/Ad dùng / 3243 /


Tôi đã cố gắng thiết lập cảnh báo như bạn đề xuất, tuy nhiên công việc sẽ chỉ chạy nếu tôi có các bước được xác định. Có cách nào để thiết lập cảnh báo mà không cần xác định các bước công việc không?
Hasanain

4

Tôi sẽ ủng hộ đề xuất @StanleyJohns nếu bạn có SQL2008. Các sự kiện mở rộng đáng để bạn làm quen với tư cách là một công cụ chẩn đoán và chuỗi An XEvent a Day của Jonathon là một nơi tuyệt vời để bắt đầu.

Một cách khác cho các khóa chết là bật cờ theo dõi 1204 và 1222 , để chuyển thông tin khóa chết vào nhật ký lỗi SQL. Kích hoạt cả hai, để bạn có được thông tin ở hai định dạng khác nhau, điều này có thể giúp dễ hiểu các chuỗi khóa chết phức tạp hơn.

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.