我开始承担更多的 DBA 角色,并尝试使用脚本和知识来帮助解决这个问题。
我一直在开发环境中尝试 sp_blizt 过程。我试图关注的一个关键领域是理解等待。
我的问题是,当您看到等待列表时,您如何将它们与导致它们的过程/查询相关联?
例如。当我看到 asyn_network_io 时,我如何显示是哪个客户端应用程序导致了这个问题,以及它当时运行的是什么导致了这个问题?
我开始承担更多的 DBA 角色,并尝试使用脚本和知识来帮助解决这个问题。
我一直在开发环境中尝试 sp_blizt 过程。我试图关注的一个关键领域是理解等待。
我的问题是,当您看到等待列表时,您如何将它们与导致它们的过程/查询相关联?
例如。当我看到 asyn_network_io 时,我如何显示是哪个客户端应用程序导致了这个问题,以及它当时运行的是什么导致了这个问题?
一般来说,你不能。您在对另一个答案的评论中提到您的监控工具显示等待统计数据出现跳跃。如果您的监控工具无法将资源峰值与当时正在运行的内容关联起来,那么您的监控工具就很糟糕。
使这变得容易的工具包括
哨兵一号性能顾问
任务聚光灯
如果您已经在使用其中一个并且遇到困难,您应该安排与供应商代表的电话,以引导您了解该产品。
您也无法使用大多数脚本来弄清楚后来发生了什么。你必须在事情发生时抓住事情。一些简单的方法(免费):
使用 sp_WhoIsActive 记录活动 – Take 2
First Responder 套件 Power BI 仪表板
如果您使用的是 SQL Server 2017 或更高版本,并且启用了查询存储,它将跟踪聚合的等待统计信息。
不过,由您来跟踪这些事情。
祝你好运!
由于您使用的是 sp_blitz ,布伦特网站本身的信息非常有用,应该可以帮助您前进https://www.brentozar.com/sql/wait-stats/
除了上述内容之外,Paul 在https://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/上提供了大量信息,这些信息应该可以帮助您前进查看排名靠前的等待
等待是开始故障排除的好时机,但这并不意味着您有性能问题,因为收集的数据很重要,因为等待统计数据的粒度越细,我的意思是聚合得越好
例如
是的,您可以使用我认为由 Adam Mechanic 编写的名为 sp_bltzwho 或 sp_whoisactive 的 Brent 站点上的一个,并获取有关主机名的更多信息以及有关当前正在运行的查询的其他相关数据,导致这些等待类型或正在等待的查询
关于 async_network_io 等待的一些注意事项。我经常看到以下几种情况:
返回非常大的数据集的查询可能会导致出现这种情况——尤其是在较慢的网络上。
100% cpu 受限或遇到其他性能下降的客户端可能会导致这种情况出现在数据库上。请务必查看调用 SQL 的客户端是否有问题 - 问题可能不在 SQL Server 中,而在客户端上。
MS Access 应用程序倾向于显示此等待事件。自从我玩过 Access 以来已经有一段时间了,但如果我没记错的话,他们的一些分页数据的控件会启动查询,但不会立即使用所有结果。相反,它会在您翻页时使用结果。
网络延迟、错误(即重新传输)将导致此问题浮出水面。如果您通过 VPN 查询数据,这是造成这种等待的另一个常见来源。
我讨厌用它来推销我们的产品,但我认为它值得一提,因为你在上面讨论了两种不同的方法,我们将两者结合到一个工具中。
使用 sp_whoisactive 可以为您提供当前谁正在主动运行查询的时间点。sentryone 和 spotlight 等工具会收集查询的历史等待统计数据。我们将这两种方法合二为一。我们历史地收集查询级别的等待统计数据,但对会话活动(类似于 sp_whoisactive)进行采样并历史地存储它,这样您就可以看到与经历 async_network_io_wait 的查询相关的会话,并查看所有详细信息(即程序名称、用户等)会议以秒为单位进行。我们有一个完全免费的SQLGrease版本,您可以使用它来解决您的问题,而不会被发送垃圾邮件或推向市场。