如果我没有在事务中执行查询,我可以成为死锁受害者吗?

Ein*_*ein 5 sql-server deadlock transactions

让我们说我打开一个事务并运行更新查询.

BEGIN TRANSACTION
UPDATE x SET y = z WHERE w = v
Run Code Online (Sandbox Code Playgroud)

查询成功返回,并且在我决定提交之前,事务会在一段时间内保持打开状态.

当我坐在事务上时,MSSQL死锁机器人是否有可能抢占我实际上没有执行任何操作的开放事务,以便在达到系统内存/资源限制时清除死锁或释放资源?

我知道SET DEADLOCK_PRIORITY并阅读了有关死锁主题的MSDN文章.逻辑上,因为我没有积极寻求对任何额外资源的索赔,我无法想象会触发一个理智的死锁避免算法的场景.

有没有人知道是否可能只是持有任何锁可以使我成为一个有效的目标?同样,任何低资源条件都会触发我的SPID被杀?

Rem*_*anu 3

为了发生死锁,死锁链中的所有参与者都必须等待资源(锁)。如果您的连接空闲,则意味着它不执行请求,这意味着它不能等待。

至于其他可能导致会话终止的条件,我至少可以想到三个:

  • 使用WITH ROLLBACK_IMMEDIATE 的管理操作
  • 镜像故障转移
  • 故意的KILL <yourspid>,也许是你友好的 DBA 开的一个玩笑