備份壓縮 (SQL Server)
適用於:SQL Server
本文描述 SQL Server 備份的壓縮,包括限制、壓縮備份的效能取捨、備份壓縮的組態及壓縮比率。 下列 SQL Server 版本支援備份壓縮:Enterprise、Standard 和 Developer。 每個 SQL Server 2008 (10.0.x) 版本與更新版本都可以還原壓縮的備份。
優點
由於壓縮的備份小於相同資料的未壓縮備份,所以壓縮備份通常需要更少的裝置 I/O 而且通常會大幅提升備份速度。
如需詳細資訊,請參閱本文稍後介紹的壓縮備份的效能影響。
Restrictions
下列限制適用於壓縮的備份:
壓縮和未壓縮的備份無法在媒體集中並存。
舊版 SQL Server 無法讀取壓縮的備份。
NTbackup 無法與壓縮的 SQL Server 備份共用磁帶。
壓縮備份的效能影響
根據預設,壓縮會大幅增加 CPU 使用量,而且壓縮程序所耗用的額外 CPU 可能會對並行作業造成不良的影響。 因此,您可能會想要在由資源管理員所限制之 CPU 使用量的工作階段中建立低優先權的壓縮備份。 如需詳細資訊,請參閱使用 Resource Governor 限制備份壓縮時的 CPU 使用量 (Transact-SQL)。
從 SQL Server 2022 (16.x) 開始,您可以使用整合式卸載和加速,來壓縮備份及卸載備份的 CPU 資源。
若要全盤了解備份 I/O 效能,您可以透過評估下列效能計數器種類,隔離往返裝置之間的備份 I/O:
Windows I/O 效能計數器,例如實體磁碟計數器
SQLServer:Backup Device 物件的 Device Throughput Bytes/sec 計數器
SQLServer:Databases 物件的 Backup/Restore Throughput/sec 計數器
如需有關 Windows 計數器的詳細資訊,請參閱 Windows 說明。 如需如何使用 SQL Server 計數器的相關資訊,請參閱 使用 SQL Server 物件。
計算壓縮備份的壓縮率
若要計算備份的壓縮率,請使用 backupset 記錄資料表的 backup_size 和 compressed_backup_size 資料行中的備份值,如下所示:
backup_size:compressed_backup_size
例如,壓縮比 3:1 表示您節省了大約 66% 的磁碟空間。 若要針對這些資料行進行查詢,您可以使用下列 Transact-SQL 陳述式:
SELECT backup_size/compressed_backup_size FROM msdb..backupset;
壓縮備份的壓縮比取決於已經壓縮的資料。 有許多因素可能會影響取得的壓縮比。 主要的因素包括:
資料的類型。
字元資料的壓縮比較其他資料類型要高。
頁面上資料列之間的資料一致性。
一般而言,如果某個頁面包含許多資料列,而且其中某個欄位包含相同的值,則系統可能會針對該值進行大幅壓縮。 反之,如果某個資料庫包含隨機資料或者每個頁面僅包含單一大型資料列,則壓縮的備份幾乎會與未壓縮的備份一樣大。
資料是否經過加密
加密資料的壓縮比大幅低於對等的未加密資料。 例如,如果在資料行層級以 Always Encrypted 加密資料,或使用其他應用層級加密來加密資料,則壓縮備份可能不會明顯縮減大小。
如需壓縮以透明資料加密 (TDE) 加密的資料庫詳細資訊,請參閱使用 TDE 備份壓縮。
資料庫是否經過壓縮。
如果資料庫已壓縮,壓縮備份可能不會大幅縮減其大小 (如果有的話)。
使用 TDE 備份壓縮
從 SQL Server 2016 (13.x) 開始,設定大於 65536 (64 KB) 的 MAXTRANSFERSIZE
會針對透明資料加密 (TDE) 加密的資料庫啟用最佳化壓縮演算法,此演算法會先將頁面解密、將其壓縮,然後再次加密。 如果未指定 MAXTRANSFERSIZE
或使用了 MAXTRANSFERSIZE = 65536
(64 KB),則搭配 TDE 加密資料庫的備份壓縮就會直接壓縮已加密頁面,且可能不會產生良好的壓縮率。 如需詳細資訊,請參閱適用於已啟用 TDE 之資料庫的備份壓縮 \(英文\)。
從 SQL Server 2019 (15.x) CU5 開始,不再需要設定 MAXTRANSFERSIZE
即可針對 TDE 啟用這個最佳化壓縮演算法。 如果備份命令指定了 WITH COMPRESSION
,或 backup compression default 伺服器組態設為 1,則 MAXTRANSFERSIZE
會自動增加至 128K,以啟用最佳化演算法。 如果在備份命令上為 MAXTRANSFERSIZE
指定了大於 64K 的值,則會接受提供的值。 換句話說,SQL Server 永遠不會自動降低值,其只會增加。 如果需要使用 MAXTRANSFERSIZE = 65536
備份 TDE 加密的資料庫,則必須指定 WITH NO_COMPRESSION
,或確定 backup compression default 伺服器組態設為 0。
如需詳細資訊,請參閱 BACKUP (Transact-SQL)。
備份檔案的空間配置
對於壓縮備份,最後備份檔案的大小取決於資料可壓縮的程度,但是在備份作業完成之前,無法得知這項資訊。 因此,根據預設,使用壓縮備份資料庫時,Database Engine 會針對備份檔案使用預先配置的演算法。 此演算法預先為備份檔案配置了預先定義的資料庫大小百分比。 如果在備份作業期間需要更多空間,Database Engine 會增加檔案大小。 如果最後的大小小於配置的空間,在備份作業結束時,Database Engine 會將檔案縮小為最後的實際備份大小。
若要讓備份檔案只依照需要增加至最終大小,請使用追蹤旗標 3042。 追蹤旗標 3042 會導致備份作業略過預設備份壓縮預先配置演算法。 如果您只要配置壓縮備份所需的實際大小,藉以節省空間,這個追蹤旗標就很有用。 不過,使用此追蹤旗標可能會導致效能稍微降低 (可能會增加備份作業的持續時間)。