Sql-Server

如何避免大型 DML 操作期間的超時

  • August 9, 2013

我有一個需要執行的大插入腳本。它大約有 55,000 條記錄和 160 列。該腳本已創建,我無法再次創建它。

我遇到的問題是它執行了大約 4 個小時左右,在此期間,使用該數據庫的系統變得非常慢並且超時很多。

我不在乎我的 INSERT 是否較慢,但它不應該影響其他使用者。

我正在考慮做一些批次,比如說 500 行並使用WAITFOR,但想知道是否有更好的選擇來做這件事。

將操作分解為多個單獨的事務塊。

BEGIN TRANSACTION;
 INSERT ...
 INSERT ...
 -- maybe 1000 or 2500 of these
COMMIT TRANSACTION;

GO
WAITFOR DELAY '00:00:01';
GO

BEGIN TRANSACTION;
 INSERT ...
 INSERT ...
 -- maybe 1000 or 2500 more of these
COMMIT TRANSACTION;

這將防止所有 55,000 個插入阻塞您的日誌並作為單個阻塞事務執行。我在這篇博文中在某種程度上談到了這種方法論,儘管它談到了更嚴格控制的DELETE操作。

如果可以的話,讓文件以一種更容易BULK INSERT或 bcp 的格式重新生成。

引用自:https://dba.stackexchange.com/questions/47245