最近我注意到在我们的 sql server 上运行的一些线程是从我们的应用程序调用的,它们处于休眠状态几分钟并且有打开的事务(通常只有一个)。
我将参数 @get_locks = 1 添加到 sp_whoisactive 以查看它们持有什么并且 xml 结果集如下所示
<Database name="NOG_APP">
<Locks>
<Lock request_mode="S" request_status="GRANT" request_count="1" />
</Locks>
</Database>
我在这里没有看到任何物体……我该如何解释呢?这是否意味着该线程没有持有任何锁?如果是这样,为什么输出不返回 NULL?
运行 SQL Server 2012 SP3。
这意味着有人在该数据库中打开了一个连接。您可以通过以下方式重现它:
然后从另一个窗口检查会话:
但是,如果您认为这是您最大的问题,那么可能是时候与用户联系并询问他们对数据库最大的抱怨了。我想你可能找错人了。我只希望我最大的问题是没有任何锁定的开放睡眠交易......