我从客户端收到的一个常见请求是帮助找出哪些查询或客户端对 SQL Server 使以太网链路饱和的贡献最大。
理想情况下,我会查看一些计数器或 DMV,显示按查询、客户端、应用程序、数据库等聚合的网络 I/O。
由于似乎没有直接的方法,作为替代,我通常查看 sys.dm_exec_query_stats 中的 *_rows 列(我认为这些列仅存在于 2008 R2+ 中)并查找似乎涉及 BLOB。
有没有更好的方法来解决这个问题?
我从客户端收到的一个常见请求是帮助找出哪些查询或客户端对 SQL Server 使以太网链路饱和的贡献最大。
理想情况下,我会查看一些计数器或 DMV,显示按查询、客户端、应用程序、数据库等聚合的网络 I/O。
由于似乎没有直接的方法,作为替代,我通常查看 sys.dm_exec_query_stats 中的 *_rows 列(我认为这些列仅存在于 2008 R2+ 中)并查找似乎涉及 BLOB。
有没有更好的方法来解决这个问题?
您正确的 2008R2 及更高版本已将 *_rows 添加到 sys.dm_exec_query_stats。我会说这是要走的路。
您将有大量查询可以创建大量磁盘 IO,但结果集仍然很小。但是,如果没有庞大的逻辑 IO,就不可能拥有庞大的结果集。
因此,首先查看按逻辑 io 排序的查询统计信息,然后再查看行数。这会给你一个很好的起点。
在 2008 R2 之前,我会查看哪些具有大型逻辑 IO 的查询具有与网络相关的等待统计信息。这种方法的问题是。1)一旦网络饱和,很可能不仅您的大型查询,而且几乎所有查询都将具有与网络相关的等待统计信息。2)网络相关的等待统计在很多情况下不是由网络相关问题引起的;-)
干杯,爱德华