我目前在 SQL Server 2008 中遇到了特定用户表频繁死锁的问题。以下是关于这个特定表格的一些事实:
- 该表有大量的行 (1 到 2 百万行)
- 在该表上使用的所有索引选项中,只有"use row lock" 被勾选 修改:该表只有一个主键索引
- 该表中的行经常被多个事务更新,但它们是唯一的 (例如,每小时可能会对不同的唯一行执行一千个或更多的更新语句)
- 该表不使用分区。
检查该表时,在sys.tables
上发现 lock_escalation
设置为 TABLE
我很想将该表的 lock_escalation 设置为 DISABLE
,但我不确定会产生什么副作用。据我所了解,使用 DISABLE
将最小化从 TABLE
级别升级锁定,如果与索引的行锁设置相结合,理论上应该最小化遇到的死锁问题。
从我在Determining threshold for lock escalation中读到的内容来看,当单个事务提取 5000 行时,锁定会自动升级。
在这种情况下,单个事务是什么意思?一个单一的会话/连接通过单独的更新/选择语句获取了 5000 行吗?
还是一个 SQL 更新/选择语句获取了 5000 行或更多行?
任何见解都将不胜感激,顺便说一下,我是个新手 DBA。
谢谢
sys.dm_db_index_usage_stats
пјҡеӨ§йҮҸзҡ„user_scans
дёҺдҪҺж•°йҮҸзҡ„user_seeks
иЎЁжҳҺзјәеӨұзҙўеј•гҖӮ - Remus Rusanu