Đưa ra một loại chờ nhất định, làm thế nào để bạn tìm thấy các truy vấn nào đang gây ra những chờ đợi đó một cách an toàn trên Máy chủ SQL 2008 R2 sản xuất?
Trong trường hợp cụ thể này, tôi đang tự hỏi về async_network_io
.
Đưa ra một loại chờ nhất định, làm thế nào để bạn tìm thấy các truy vấn nào đang gây ra những chờ đợi đó một cách an toàn trên Máy chủ SQL 2008 R2 sản xuất?
Trong trường hợp cụ thể này, tôi đang tự hỏi về async_network_io
.
Câu trả lời:
Cách ưa thích của tôi để kiểm tra những điều này là sử dụng công cụ lưu trữ sp_WhoIsActive tuyệt vời của Adam Machanic. Đây là video về cách sử dụng nó và liên kết để tải mã:
http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/
Điều hấp dẫn là bạn phải chạy định kỳ để kiểm tra kết quả. Nếu bạn muốn dữ liệu này được thu thập cho bạn định kỳ, hãy xem hướng dẫn của Kendra Little về cách nắm bắt kết quả sp_WhoIsActive vào một bảng:
http://www.littlekendra.com/2011/02/01/whoisactive/
Cuối cùng, nếu bạn muốn một cái gì đó kích hoạt bất cứ khi nào một truy vấn chờ async_network_io, bạn có thể sử dụng một công cụ mới có tên là Sự kiện mở rộng. Nó giống như các điểm gỡ lỗi bên trong công cụ SQL Server nơi bạn có thể thực hiện phép thuật. Thành thật mà nói, nó hơi đau để sử dụng ngay bây giờ trong năm 2008.
'async_wait_io' không phải là loại chờ. Các loại chờ ASYNC% có thể là:
Một vài liên kết tốt cho các loại chờ:
Truy vấn của tôi để tìm kiếm sự chờ đợi hiện tại:
SELECT req.session_id
,blocking_session_id
,ses.host_name
,DB_NAME(req.database_id) AS DB_NAME
,ses.login_name
,req.status
,req.command
,req.start_time
,req.cpu_time
,req.total_elapsed_time / 1000.0 AS total_elapsed_time
,req.command
,req.wait_type
,sqltext.text
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
JOIN sys.dm_exec_sessions ses
ON ses.session_id = req.session_id
WHERE req.wait_type IS NOT NULL
--WHERE req.wait_type = '?'