Xác định xem có đang cập nhật số liệu tự động không


8

Trong hệ thống sản xuất của chúng tôi, đôi khi các truy vấn 'bị đình trệ'. Trong khi bị đình trệ, không sử dụng tài nguyên gia tăng (CPU, Đọc) được hiển thị trong sp_whoisactive và không có chặn.

Trong chẩn đoán hồi cứu, chúng ta có thể thấy rằng sys.dm_db_stats_properIES hiển thị last_updated trong khoảng thời gian truy vấn bị 'đình trệ'.

Những gì chúng tôi muốn làm là - khi chúng tôi thấy một truy vấn bị đình trệ - sau đó xác định những cập nhật thống kê tự động nào đang được tiến hành.

Bởi vì chúng tôi muốn thực hiện quảng cáo này và cũng vì chúng tôi không muốn ảnh hưởng đến hiệu suất sản xuất, sử dụng profiler có lẽ không phải là một lựa chọn cho chúng tôi.

(Nếu không có cách nào để thực hiện quyết định đột xuất, thì có lẽ chúng ta sẽ phải xem xét các Sự kiện mở rộng hoặc một số theo dõi phủ đầu có tác động thấp khác).

Phiên bản của chúng tôi là 2014, tuy nhiên câu trả lời cho các phiên bản sau cũng sẽ hữu ích.

Câu trả lời:


10

SQL Server 2019 đã giới thiệu một chỉ số chờ để theo dõi điều này. Trên các phiên bản trước, bạn để lại dấu vết / XE. Xem bài viết của tôi về stat chờ mới:

Để sử dụng XE trên các phiên bản trước, sự kiện bạn muốn tìm là auto_stats. Một phiên tối thiểu để giúp bạn bắt đầu sẽ như thế này:

CREATE EVENT SESSION auto_stats
    ON SERVER
    ADD EVENT sqlserver.auto_stats
    ADD TARGET package0.event_file
    ( SET filename = N'auto_stats' );

Mặc dù bạn có thể muốn định cấu hình nó với một số tính cụ thể cho cơ sở dữ liệu hoặc bảng mà bạn quan tâm và chắc chắn tôi muốn lọc theo thời lượng ( WHERE [duration] > 1000000sẽ là một giây) hoặc một cái gì đó, vì nó sẽ khá ồ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.