Sql-Server
頁面壓縮不起作用?
我創建了一個表,其中有大約 100 個分區(每月),所有分區都配置為使用頁面壓縮。之後,我將逐月向該表中插入數據。
我現在希望 SQL Server 應用頁面壓縮。但是使用
sp_estimate_data_compression_savings
它看起來不像。(我可以節省大約 40%-50%。)我在配置頁面壓縮時錯過了什麼嗎?
問題是我現在有大文件,每個分區 70-80 GB。當我壓縮它們時,它們是半空的。重新獲得這個磁碟空間是不可能的,因為如果我嘗試收縮分區後面的數據文件,我最終會得到一個碎片化的聚集索引。
我怎樣才能避免這個磁碟空間浪費聚會?
如果您使用 VARCHAR(MAX) 之類的大欄位,您會發現頁外數據沒有通過頁面壓縮進行壓縮。(嘿,算了。)
要查看表外儲存了多少數據,請使用免費的開源腳本sp_BlitzIndex(免責聲明:我是這方面的合著者)。您可以像這樣在表級別執行它:
EXEC sp_BlitzIndex @DatabaseName = 'mydb', @SchemaName = 'dbo', @TableName = 'whywontthiscompress'
然後,在列出索引的頂部結果集中,查看儲存在表中的 LOB 數據量。如果它很多,那可能就是壓縮不起作用的原因。(如果您需要更多幫助/澄清,您可以在您的問題中發布頂部結果集的螢幕截圖。)
從頁面壓縮實現:
但是,表的元數據表明應該使用頁面壓縮。隨著數據被添加到第一個數據頁,數據被行壓縮。因為頁面未滿,所以頁面壓縮沒有任何好處。當頁面已滿時,要添加的下一行將啟動頁面壓縮操作。審查整個頁面;對每一列進行前綴壓縮評估,然後對所有列進行字典壓縮評估。
看看下面的連結