跟踪标志 1211 不起作用 - SQL Server 2008 R2
Posted
技术标签:
【中文标题】跟踪标志 1211 不起作用 - SQL Server 2008 R2【英文标题】:Trace Flag 1211 Not Working - SQL Server 2008 R2 【发布时间】:2012-04-10 11:18:32 【问题描述】:在 SSIS 加载期间,当员工表得到更新时,锁定就会生效。
但是,已使用以下语句禁用表上的锁升级:
ALTER TABLE dbo.Employee SET (LOCK_ESCALATION = DISABLE)
DBCC TRACEON (1211,-1)
但是,表(对象)确实被锁定并保留了将近一个小时。总数更新(插入、更新、删除语句)约为 200,000
这里的最终目标并不是真正避免锁定,而是成功地允许对表进行读取。
没有。更新(插入/更新/删除)的数量非常高,每天 50,000 次,而实际上由于锁定而受到影响的表上只有大约 50-100 个搜索/选择查询。
【问题讨论】:
从这里着手解决方案:***.com/questions/2471055/… 【参考方案1】:来自 BOL:
SET LOCK_ESCALATION = 禁用
在大多数情况下防止锁升级。表级锁不是 完全不允许。例如,当您扫描一个表时, 在可序列化隔离级别下没有聚集索引, 数据库引擎必须使用表锁来保护数据完整性。
Serializable 是 SSIS 包上的默认 IsolationLevel(单击控制流上的任何空白区域并检查包的属性)。 您的表是否有任何更改没有聚集索引?
【讨论】:
已尝试设置 lock_escalation = disable 但没有帮助。此外,该表当前没有索引。索引确实存在较早,但被删除,因为没有。插入/更新/删除的数量非常高——每天更新大约 50,000 条记录,而表上只有大约 50 条搜索/选择查询。我们愿意考虑创建索引(集群/非集群) 所以,有你的解释。如果没有聚集索引,SET LOCK_ESCALATION = DISABLE 几乎会被忽略 如果没有,是否会出现“set lock_escalation = disable”不会生效的情况。的更新太多或任何/其他情况? 另外,在 SSIS 中 IsolationLevel 设置为 Serializable 只需创建聚集索引或更改 SSIS 包的隔离级别以上是关于跟踪标志 1211 不起作用 - SQL Server 2008 R2的主要内容,如果未能解决你的问题,请参考以下文章