傳統上,InnoDB
壓縮功能主要建議用於唯讀或幾乎唯讀的工作負載,例如在資料倉儲設定中。快速但相對較小且昂貴的SSD 儲存裝置的興起,使得壓縮對於 OLTP
工作負載也具有吸引力:高流量、互動式網站可以透過使用具有頻繁INSERT
、UPDATE
和DELETE
操作的壓縮資料表,來減少其儲存需求和每秒的 I/O 操作次數 (IOPS)。
這些設定選項可讓您調整特定 MySQL 執行個體的壓縮運作方式,重點在於寫入密集型操作的效能和延展性
innodb_compression_level
可讓您調高或調低壓縮程度。較高的值可讓您將更多資料放入儲存裝置,但代價是在壓縮期間會產生更多 CPU 負擔。較低的值可讓您在儲存空間不重要或您預期資料的壓縮性不特別高時,減少 CPU 負擔。innodb_compression_failure_threshold_pct
指定壓縮資料表更新期間的壓縮失敗截止點。當超過此閾值時,MySQL 會開始在每個新的壓縮頁面內保留額外的可用空間,動態調整可用空間量,最高達到innodb_compression_pad_pct_max
所指定的頁面大小百分比innodb_compression_pad_pct_max
可讓您調整每個頁面中保留的最大空間量,以記錄壓縮列的變更,而無需再次壓縮整個頁面。值越高,可以記錄的變更越多,而無需重新壓縮頁面。MySQL 會針對每個壓縮資料表內的頁面使用可變數量的可用空間,只有當指定百分比的壓縮操作在執行時「失敗」,需要昂貴的操作來分割壓縮頁面時才會使用。innodb_log_compressed_pages
允許您停用將重新壓縮的頁面的映像檔寫入重做日誌。當壓縮資料被修改時,可能會發生重新壓縮。預設情況下,此選項為啟用狀態,以防止在復原期間使用不同版本的zlib
壓縮演算法時可能發生的損壞。如果您確定zlib
版本不會變更,請停用innodb_log_compressed_pages
,以減少修改壓縮資料的工作負載的重做日誌產生量。
由於處理壓縮資料有時會同時在記憶體中保留壓縮和未壓縮版本的頁面,因此當對 OLTP 風格的工作負載使用壓縮時,請準備好增加 innodb_buffer_pool_size
設定選項的值。