使用 sp_WhoIsActive,我看到我有很多进程处于“睡眠”状态,几个小时。我不确定原因,仍在进行故障排除(超时?未提交事务的错误代码?)。
使用下面的查询,我注意到所有这些打开的事务都是处于“睡眠”状态的 SELECT 查询。为什么 SELECT 会打开一个事务?这些是否可能位于某个存储过程的中间,并且 [TEXT] 字段仅显示已执行过程中的最后一条语句?任何未结交易都没有 wait_info。
SELECT [TEXT] as SQLcode
FROM SYS.SYSPROCESSES SP
CROSS APPLY SYS.DM_EXEC_SQL_TEXT(SP.[SQL_HANDLE])AS DEST WHERE OPEN_TRAN=1
睡觉不一定是问题。根据应用程序,线程池可能会保持连接打开,即使没有运行。
如果没有交易开放,那么真的有问题吗?
Kendra Little 最近在她的博客上写道:
根据 Kenda 的建议,看看sp_whoisactive而不是使用 sp_who2。
您如何开始使用下面的此查询,然后根据您自己的目的对其进行调整:
我在下面使用这个,它在大多数情况下都有帮助: