我一直在使用sp_whoisactive,这对于查找运行会话和阻塞的详细信息非常有帮助。
我想检查是否有任何选项可以根据此过程安排作业,并且仅当数据库上存在活动阻塞并且阻塞保持超过可配置的分钟数时才提醒我。
此外,只有在达到超过可配置的数据库阻塞数时才应触发警报。
我使用了http://www.sqlserver-dba.com/2017/01/how-to-monitor-blocked-processes-with-sql-alert-and-email-sp_whoisactive-report.html提供的详细信息,但是它发送每次运行时都会发出警报,并且似乎没有检查阻塞情况。无论是只运行一个查询还是运行多个查询,无论是阻塞还是不阻塞,都发送电子邮件。不确定,如果我遗漏了什么。
您链接到的脚本使用 SQL Server 的内置阻塞进程报告。它没有任何关于阻塞级别的配置选项——它只是按间隔(例如,每 5 秒)唤醒,检查阻塞,如果发现任何阻塞,则运行脚本。
有一个阻塞进程阈值设置,但这只是确定阻塞进程报告运行的时间间隔——比如每 5 秒。(不要低于这个值。)
如果您想构建自己的自定义阻塞进程报告并在其中放置关于发生多少阻塞以及在哪些数据库中的逻辑,这将是留给读者的练习。您可以从Darko 的构建自定义阻塞进程报告开始。
根据我多年来的经验,我见过想要构建这类报告的人,然后他们要做的下一件事就是构建一个 Outlook 规则,将所有这些警报移动到一个文件夹中,然后他们阅读它们之后。如果您要这样做,请不要费心发送电子邮件。
只需设置一个扩展事件会话来查找阻塞的进程和死锁 - 请注意,您需要更改服务器的文件位置和名称:
启用 SQL Server 的阻塞进程报告:
当你想检查阻塞时,这个查询会读取文件:
希望这有助于您入门。另外,仅供参考,我编辑了您的问题以删除有关 sp_WhoIsActive 属于我的部分 - 它不是。这是亚当·马哈尼奇的。如果你亲自见到他,你应该对他说声谢谢,并给他买他喜欢的饮料。