2013-05-20 36 views
8

我試圖加快事實表加載作爲整體性能項目的一部分。這張桌子每晚大約增加了約120萬行約100k。該表格的索引非常龐大。對於快速裝載目的地使用表鎖定選項有什麼後果?

目前我正在使用SSIS快速加載OLE DB目標並加載100,000行大約需要15分鐘。對我來說,插入100k行看起來非常重要,所以我修改了軟件包以將結果轉儲到臨時表中,然後從臨時表中將T-SQL插入到事實表中。插入現在運行不到1分鐘。

我發現一個普通的舊T-SQL插入比SSIS快速加載更快,所以我開始考慮在OLEDB目的地上檢查哪些盒子。事實證明,表鎖沒有被選中。當我檢查這個選項時,SSIS負載現在不到1分鐘。 我的問題是:

  • 什麼是離開表鎖檢查?
  • 默認情況下T-SQL插入語句是否發出表鎖,這就是爲什麼它最初更快?

回答

7

嗯,我認爲對此的解釋是簡單的(見更詳細的參考here):

關於第一個問題:

表鎖定 - 默認情況下選中此設置與建議 的目的是讓它被檢查,除非同時某個 其他進程正在使用同一個表。它指定將在目標表上獲取表鎖 而不是獲取多行級鎖 ,這可能會變成鎖升級問題。

至於插入語句,考慮到需要插入的相當多的行數,SQL Server很可能會選擇進行表鎖。

要確認這一點,您可以使用sys.dm_tran_locks DMV來檢查桌子上固定的是哪種鎖。以下是關於如何解釋結果的很好的示例(以及對鎖定升級的較好閱讀):http://aboutsqlserver.com/2012/01/11/locking-in-microsoft-sql-server-part-12-lock-escalation/

+0

啊,所以多行級別的鎖定會解釋緩慢。很酷,謝謝。 – AS2012

+0

@ AS2012:不僅如此,更多的鎖也會佔用更多的內存。我鏈接的文章在這個主題上非常相關和詳細。 –

相關問題