0
A
回答
2
因为死锁可能几乎只有当您使用行级锁定发生。死锁的最基本的例子是:
- 事务A是更新行1,2,3
- 事务B被更新行3,2,1
- A修改行1,打开(锁)第2行,并为行等待3
- 乙锁排3,和排等待2
由于A有2个,需要3,和B有3个,需要2,他们将永远等待,除非查询引擎捕获它,这是造成死锁的原因。基本上这是一个无限的等待逻辑循环被取消。
当您使用TABLOCK
(指示引擎使用表锁定而不是行锁定)时,事务A将等待整个表可用(如果B已将其打开),或者将锁定在整个表(如果可用的话),阻止任何其他事务修改表,直到它完成。
相关问题
- 1. 在父子之间发送消息 - 为什么没有死锁?
- 2. 为什么在这种情况下没有死锁?
- 3. 避免死锁和防止死锁有什么区别?
- 4. Oracle死锁没有显式锁定和读提交隔离级别,为什么?
- 5. 为什么我有这个SQL Server死锁?包括T1222的死锁痕迹
- 6. 这段代码怎么没有死锁?
- 7. 为什么这个查询会死锁?
- 8. 为什么我会遇到dispatch_once死锁?
- 9. 为什么它不会造成死锁?
- 10. 这段代码为什么会死锁?
- 11. 为什么我的频道死锁?
- 12. 为什么这不会导致死锁
- 13. 这些查询为什么会死锁?
- 14. 为什么我的PipedOutputStream死锁?
- 15. 为什么睡眠(1000)导致死锁?
- 16. GC.AddMemoryPressure为什么会死锁/挂起?
- 17. 为什么IPC :: Open3会死锁?
- 18. 为什么它不会发生死锁?
- 19. 死锁没有到达keyPressedEvent()
- 20. 没有循环的死锁
- 21. Java的:为什么这是一个死锁时锁定为空?
- 22. postgres死锁没有明确锁定
- 23. SSL&JQuery =没有挂锁/为什么?
- 24. 为什么嵌套锁不会导致死锁?
- 25. 为什么下面的代码有死锁?
- 26. 死锁行为
- 27. 什么是死锁的常见原因?
- 28. 死锁没有用户代码
- 29. 为什么锁不锁?
- 30. 有什么办法杀死运行的线程死锁的“http:8080-42”,它封锁了所有其他线程
当我们tablockx它是正确的sql服务器对表应用锁,但例如一些另一个事务试图获得同一资源的tablockx然后事务必须等待,但它应该有一些限制时,sql服务器处理或抛出例外情况是这个资源已经获得了独占表锁,导致了另一个事务的死锁 – stackflow532
如果你首先使用'TABLOCK'来避免死锁,为什么你会希望它在等待时间太长时抛出一个死锁错误?此外,这与发布的问题无关。如果您有功能请求在Microsoft Connect上发布它。 – JNK
对不起,你误会了,我不会抛出一个死锁错误,我只想知道另一个事务将等待多久,只要获得锁定的初始事务将释放锁定。 – stackflow532