2012-04-10 39 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