2012-04-10 66 views
0

在SSIS加载期间,当雇员表得到更新时,锁定生效。跟踪标志1211不工作 - SQL Server 2008 R2

然而,对使用以下的语句表禁用锁升级:

  1. ALTER TABLE dbo.Employee SET (LOCK_ESCALATION = DISABLE)
  2. DBCC TRACEON (1211,-1)

但是,表(对象)不被锁定并保持了近一小时。总数没有。的更新(插入,更新,删除语句)大约是200,000

这里的最终目的并不是真的要避免锁定,而是成功地允许在表上读取数据。

The no。的更新(插入/更新/删除)在每天50,000个范围内显着较高,相比之下,表中实际只有约50-100个搜索/选择查询受到锁定影响。

+0

一个解决方案说干就干从这里: http://stackoverflow.com/questions/2471055/why-use-a-read-uncommitted-isolation-level – psam 2012-04-11 07:42:29

回答

0

从BOL:

SET LOCK_ESCALATION = DISABLE

防止在大多数情况下,锁升级。表级锁不是完全禁止的 。例如,当您扫描一个在可序列化隔离级别下没有聚簇索引的表时,数据库引擎必须采取表锁来保护数据完整性。

可串行化是SSIS包上的默认IsolationLevel(单击控制流上的任何空白区域并检查包的属性)。 任何改变你的表没有聚集索引?

+0

试过一套lock_escalation =禁用,但没有帮助。 此外,表格当前没有索引。 索引确实存在较早,但被删除,因为没有。的插入/更新/删除数据显着高 - 每天约有50,000条记录的数据更新,而在表格上只有大约50条搜索/选择查询。 我们愿意考虑创建索引(聚簇/非聚簇) – psam 2012-04-10 12:55:18

+0

所以,有你的解释。没有聚簇索引,SE​​T LOCK_ESCALATION = DISABLE几乎被忽略 – Diego 2012-04-10 12:59:41

+0

如果没有聚集索引,'set lock_escalation = disable'将不会生效。更新过多或者其他情况? – psam 2012-04-10 13:06:14