2013-11-15 99 views
1

假設我有一個insert語句去往其中值來自另一個表的select語句。因此,一次插入許多記錄。我有另一個只需要插入單個記錄的進程。我怎樣才能讓SQL Server以更及時的方式執行單一插入語句?在我的觀察中,單個人在多次插入運行時被阻塞了相當長的一段時間。如果單曲可以「滑入」,那將會很好。我嘗試在插頁上添加WITH (ROWLOCK)多條插入語句阻止小的一條

+0

你可以控制這兩個進程的時間,以正確的順序啓動它們嗎?否則,最好讓事情按原樣運行。 – Szymon

+0

分享您的代碼 – SK2185

+0

的代碼只是像 INSERT INTO表A SELECT * FROM表B 和第二種方法做這樣的事情 INSERT INTO表A VALUES(VAL1,vale2)等 單個刀片是被基於表格的插入程序阻塞。 – BrianK

回答

1

批量插入可能升級到表鎖。您可以通過將表DDL更改爲LOCK_ESCALATION=DISABLE來減少表鎖,但這可能會降低批量插入性能。

另一種方法是重新批量批量插入,以使其永遠不會超過5000 locks at a time.。但是,這會改變每個工作單元的範圍,因爲您現在將在每個較小的批次之後進行落實,這可能並不理想。

+1

我傷透了批。這是其他進程可以及時插入記錄的唯一途徑。 – BrianK