我最近实现了一个代理作业,它每 10 分钟检查一次 SQL Server 是否有任何长时间运行的查询,如果检测到,它将向收件人发送一封包含信息的邮件。然而,自从把它放进去后,我注意到下面的很多查询,并想知道这是否是我应该关注的事情:
WAITFOR(RECEIVE conversation_handle, service_contract_name, message_type_name, message_body FROM ExternalMailQueue INTO @msgs), TIMEOUT @rec_timeout
从数据库邮件中了解它,等待信息是 (1x: 62093ms)BROKER_RECEIVE_WAITFOR 但我是否需要担心或只是将其从警报中排除。
通过sp_whoisactive查看可以看到open_transaction计数为1,状态为suspended。
任何帮助表示赞赏。
根据我的经验,你应该忽略它。此查询来自使用 SQL Broker 的程序。这是正常的。该程序只是在等待 SQL Broker 以这种方式通知它。(当然等待 SQL Broker 通知会产生长时间的等待。)
我们正在使用经纪人,我有同样的事情。
只是想添加一个细节:任何等待 SQL Broker 的应用程序也将使用服务器线程池中的线程。因此,如果您在服务器上有多个使用 Broker 的数据库,请记住线程被保留以等待 Broker。我在一个服务器上遇到了一个问题,数百个数据库都用完了线程,因为它们都使用了代理。