Avi*_*ias 12 sql-server deadlock locking
我目前在SQL Server 2008中使用特定用户表频繁死锁时遇到麻烦.以下是有关此特定表的一些事实:
检查表格后sys.tables,我发现lock_escalation设置为TABLE
我非常想把这张桌子的lock_escalation转到,DISABLE但我不确定这会产生什么副作用.从我的理解,使用DISABLE将最小化升级锁从TABLE级别,如果与索引的行锁设置结合,理论上应该最小化我遇到的死锁..
根据我在确定锁升级阈值时所看到的,当单个事务获取5000行时,锁定似乎会自动升级.
在这个意义上,单笔交易意味着什么?单个会话/连接通过单独的更新/选择语句获得5000行?
或者是一个获取5000行或更多行的单个sql update/select语句?
非常感谢,btw,n00b DBA在这里
谢谢
小智 9
当语句在SINGLE对象上保存超过5000个锁时,会触发LOCK Escalation.在同一个表的两个不同索引上持有3000个锁的语句不会触发升级.
当尝试锁定升级并且对象上存在冲突锁定时,尝试将中止并在另外1250次锁定后重试(保持,未获取)
因此,如果您对各行执行了更新,并且列上有支持索引,则锁定升级不是您的问题.
您将能够使用分析器中的Locks-> lock escalation事件来验证这一点.
我建议你捕获死锁跟踪以确定死锁的实际原因.
| 归档时间: |
|
| 查看次数: |
14962 次 |
| 最近记录: |