之前有寫過一篇如何在大量Insert資料的交易中降低交易紀錄的成長呢? 其中有提到幾種降低交易紀錄量的寫入模式..
昨天將1000多萬筆紀錄由A主機搬到B主機,該目的資料庫復原模式為Simple。我採用Insert Into with(TABLOCK)的做法來大量寫入資料,結果耗費我8分鐘時間且LDF增大至3.5GB。
我心想已經是用 with(TABLOCK)來塞資料為何LDF還是會大量成長。回去看看我之前寫的文中有一參考資料寫到Insert Into with(TABLOCK)須搭配某些情境才能達到不寫LDF的高速寫入。
那就是目的資料表不可以有Clustered Index。因此我將該資料表Truncate後再砍掉Clustered Index,然後再用Insert Into with(TABLOCK)塞資料。這一次寫入1000多萬筆耗費時間為58秒,完成資料寫入後再建Clustered Index也才花費10-20秒左右,重點是LDF完全沒長大。
注意:如果是資料庫復原模式是Full那Insert Into with(TABLOCK)這一招就無效了歐
在Simple模式下,目的Table有PK或Clustered Index時也可以透過匯入匯出精靈來Bulk Insert資料,經測試發現LDF也不會長大。
我是ROCK
rockchang@mails.fju.edu.tw