[SQL SERVER]大量Insert最小化交易紀錄
SQL Server中任何資料操作基本上都會寫入交易記錄檔中,
如果每筆資料操作都採取完整記錄,無疑會拖慢資料操作效能且交易紀錄檔可能成長快速,
參考文章提到如果要最小化heap交易紀錄,必須達到以下條件
1.資料庫復原模式必須設定為大量新增(bulk-logged)或簡單(simple)。
2.Enable Trace flag 610
3.新增資料必須依照clustered index 排序
但這篇我將測試資料庫完整復原模式下執行大量insert時,
那些方法可以最小化交易紀錄檔。
Heap Table
1.insert into select
查看交易紀錄檔內容
SELECT top 12 Operation,Context,[Log Record Length],[Transaction Name]
FROM fn_dblog(NULL, NULL)
where allocunitname='dbo.testa'
交易紀錄檔數量:35488
經過時間:2秒
2.insert into with(tablock) select
先執行checkpoint 截斷交易紀錄檔
查看交易紀錄檔內容
交易紀錄檔數量:11291
經過時間:1秒
3.select into
先執行checkpoint 截斷交易紀錄檔
查看交易紀錄檔內容
交易紀錄檔數量:74
經過時間: <1秒
non-Heap Table
create clustered index cidx on testa(c1)
1.insert into select
查看交易紀錄檔內容
SELECT top 12 Operation,Context,[Log Record Length],[Transaction Name]
FROM fn_dblog(NULL, NULL)
where allocunitname='dbo.testa.cidx'
交易紀錄檔數量:80844
經過時間: 3秒
2.insert into with(tablock) select
查看交易紀錄檔內容
交易紀錄檔數量:11229
經過時間: 1秒
結論:
資料庫完整復原模式下,看來select into 可最小化交易紀錄數量,
其次是透過 tablock 提示也有不錯的效果。
參考