找出导致最大网络流量的查询


23

在生产型SQL Server上,我看到数据流量间歇性地急剧增加。高达200Mbit / s的速度导致NETWORK IO等待,进而导致查询超时。我如何找出哪些查询返回大结果集?

Answers:


18

您可以从DMV找到以下内容:

SELECT session_id, num_writes, st.text AS statement_text
FROM sys.dm_exec_connections AS ec
CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) AS st
ORDER BY num_writes DESC

与跟踪不同,这在生产服务器上运行应该是完全安全的。


7

我将使用SQL Profiler跟踪生产数据,并收集具有最大读写量的代码/批次。过滤跟踪以仅获取读取/写入次数较高的过程和批次。选择一个适合您的样本:比方说超过100万次读取或写入。

我将对那些对开发/测试机器的调用进行采样,并在Management Studio中运行它们,并启用选项“包括客户端统计信息”(在菜单查询-包括客户端统计信息中)。然后,您将有一个单独的窗口,其中包含客户端统计信息:从客户端发送的字节,从服务器接收的字节。

不要在不过滤数据的情况下在生产数据库上进行跟踪!!!!尽可能过滤(按数据库,主机名以及您所相信的内容),然后才开始跟踪。:-)之后,请不要忘记关闭Profiler。

PS:我记得一个不错的选择:在一段时间的跟踪中,还应该使用Perfmon保存数据(仅选择IO参数)。Profiler具有将跟踪文件和perfmon数据文件一起导入的良好功能。当您有最大的IO峰值时,您就可以看到那里。

PS2:我同意Gaius的选择更为优雅。但是我留给后代一个庞大的答案!:-)


5

如果您尚未查看它,则可能需要查看Adam Machanic的sp_WhoIsActive。他最近发表了一系列博客文章,解释了sp_WhoIsActive内置的不同功能,其中一个是@delta_interval。

这不仅会向您显示总体上占用最多CPU或I / O的内容,而且还可以向您显示当前正在占用最多CPU或I / O的内容。

请查看以下博客系列,以获取有关此功能的完整说明:

http://whoisactive.com/docs/01_background/

以下博客文章解释了如何对sp_WhoIsActive的输出进行排序并选择要显示的列:

http://whoisactive.com/docs/24_output/

这是他设置的以下更新链接上可用的众多帖子之一。

http://whoisactive.com

截至此答案发布时,版本11.0已可用,因此,如果您使用的是旧版本,则可能是时候升级了:D

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.