在过去2个月的最后一个星期日上午9点07分,我们在SQL服务器中遇到阻塞。它持续2-3个小时,然后自行消失。我们在这个月的任何其他时间都没有任何阻止。
如何检查特定时间发生的事情?
我尝试了下面的查询,但它没有显示当天在该特定时间执行的任何内容。最后一个条目是问题开始前35分钟,然后下一个条目是问题开始后30分钟。
SELECT deqs.last_execution_time AS [Time], dest.text AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC
我还检查了SQL Server代理中的预定作业,但没有正常运行的任何内容(备份,cdc,索引重建等)已启用。
因此,我的问题是:如何在该月的最后一个星期日的特定时间找到哪个外部进程正在使用数据库?我会很感激任何提示和建议。
答案 0 :(得分:1)
sys.dm_exec_query_stats
仅显示缓存的执行计划。这不太可能对你有帮助。
相反,由于在发生这种情况时可以预测,您可以使用sys.dm_exec_connections
来获取活动连接(然后您可以使用相同的端口将任务管理器用于该进程 - 如果它在您有权访问的计算机上运行)。要查找正在执行的查询类型,请使用sys.dm_exec_requests
。
这必须在实际负载发生时运行 - 因此您可能希望在问题发生时手动执行,或者您需要安排执行并记录结果。