今天Alter一張千萬筆的資料表中一個欄位為NOT NULL,結果爆了LDF
為了如何降低Alter Table Alter Column not null 做了一些LAB,結果都不會發生大量產生LOG,這使我疑惑了。
為何我之前的Alter Column not null爆LDF無法重現呢?
經爬文發現一篇文章,它裡面提到的是當他的Table是壓縮狀態時他做Alter Column not null產生大量的LOG。此時我回頭看一下我的Table發現該資料表有做Page 壓縮,所以當您的Table有做壓縮時Alter Column not null不只做異動meta data的事而已,他也會一併去modify page內的資料,筆記一下。
建立一個DB叫testdb,此時該DB尚未加入AG。我們建兩張表tb1及tb2並寫入7000多筆資料。
我們先Alter tb1資料表的Column成為not null後檢視一下LDF。如下圖整個alter table alter column not null只產生了26筆log
下圖是DB加入AG後做alter table alter column not null,會發現產生了7000多筆的log
參考資料來源 : Changing column in NOT NULL. Why is there so much transaction log activity on compressed tables?
我是ROCK
rockchang@mails.fju.edu.tw