資料表壓縮的狀況下Alter Column Not Null會產生大量Log

今天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內的資料,筆記一下。

還有當Database有加入AG時,Alter Column not null也會產生大量的LOG歐

建立一個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