Options to Improve SQL Server Bulk Load Performanceで、Bulk Loadをする際に、どのような手段をとると一番性能が良くなるのかの調査結果が後悔されています。
シナリオは次の4つ
- BULK Load
- tablockをして、BULK Load
- インデックスを削除して、tablockをして、BULK Loadしてからインデックス再作成
- インデックスを削除して、tablockをして、BULK Loadしてからインデックス再作成してから、復旧モデルの変更
Test Scenario | CPU (ms) | Reads | Writes | Duration (ms) |
---|---|---|---|---|
1 | 52291 | 75138341 | 57704 | 142978 |
2 | 30763 | 15165138 | 57572 | 96844 |
3 | 20763 | 195589 | 39629 | 67510 |
4 | 53006 | 195916 | 39651 | 62766 |
結論としては、4番目の「インデックスを削除して、tablockをして、BULK Loadしてからインデックス再作成してから、復旧モデルの変更 」が最速になります。
ALTER DATABASE testdb SET RECOVERY SIMPLE; DROP INDEX testtable.idx_testtable_col2; DROP INDEX testtable.idx_testtable_col3; BULK INSERT testdb.dbo.testtable FROM 'C:\testtable.dat' WITH (FORMATFILE = 'C:\testtable_formatfile.fmt', TABLOCK); CREATE INDEX idx_testtable_col2 on testtable (col2 asc); CREATE INDEX idx_testtable_col3 on testtable (col3 asc); ALTER DATABASE testdb SET RECOVERY FULL;