给定某种等待时间,您如何查找在生产SQL 2008 R2 Server上安全地导致哪些查询等待的查询?
在这种情况下,我想知道async_network_io
。
给定某种等待时间,您如何查找在生产SQL 2008 R2 Server上安全地导致哪些查询等待的查询?
在这种情况下,我想知道async_network_io
。
Answers:
我最喜欢的检查方法是使用Adam Machanic的出色的sp_WhoIsActive存储过程。以下是有关如何使用它的视频以及下载代码的链接:
http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/
问题是您必须定期运行它以检查结果。如果希望定期为您收集这些数据,请查看Kendra Little的有关将sp_WhoIsActive结果捕获到表中的教程:
http://www.littlekendra.com/2011/02/01/whoisactive/
最后,如果您希望每当查询等待async_network_io时触发某些事件,则可以使用一个名为扩展事件的新工具。就像SQL Server引擎中的调试点,您可以在其中进行魔术。坦白说,现在在2008年使用它有点痛苦。
“ async_wait_io”不是等待类型。可能的ASYNC%等待类型为:
一些等待类型的好链接:
我去查询寻找当前的等待:
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 = '?'