我在运行 SQL Server 2017 的服务器上的 SSMS 中遇到了一个问题,我运行了一个查询来更新数据库的所有者,并且查询消息选项卡显示查询已成功完成。然而,我很快就收到服务器问题的通知,令我惊讶的是,查询正在休眠并阻止数据库的使用。杀死 spid 解决了问题,但是这样的事情是怎么发生的呢?有什么我可以检查的吗?
如果您打开一个事务并将其保持打开状态,并且锁从未被释放,就会发生这种情况。
您可以通过以下方式降低发生这种情况的可能性SET XACT_ABORT ON。
这样,任何未处理的错误都将回滚事务(许多错误不会被视为自动事务中止,因此在运行失败后,您可能不会意识到您已经有一个打开的事务,即使您修复了错误并运行了BEGIN TRAN ... COMMIT事务仍然打开,您所做的只是切换@@TRANCOUNT)。
如果上述原因不是原因,则检查脚本中是否有不匹配数量的BEGIN TRANSACTIONandCOMMIT语句,还要检查您的连接是否使用隐式事务(因为这是事务启动的另一种方式,但不明显)
此外,您还可以养成在完成后关闭 SSMS 查询选项卡的习惯,如果此时有任何未提交的事务,它会通知您(或者只是SELECT @@TRANCOUNT从该窗口运行健全性检查)
| 归档时间: |
|
| 查看次数: |
488 次 |
| 最近记录: |