文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man 頁面 (TGZ) - 258.2Kb
Man 頁面 (Zip) - 365.3Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  連線壓縮控制

6.2.8 連線壓縮控制

與伺服器的連線可以使用用戶端和伺服器之間流量的壓縮,以減少透過連線傳送的位元組數。預設情況下,連線是不壓縮的,但如果伺服器和用戶端同意互相允許的壓縮演算法,則可以壓縮連線。

壓縮的連線源自用戶端,但會影響用戶端和伺服器端的 CPU 負載,因為兩端都會執行壓縮和解壓縮操作。由於啟用壓縮會降低效能,因此其優點主要出現在網路頻寬較低、網路傳輸時間主導壓縮和解壓縮操作的成本,以及結果集較大的情況下。

本節說明可用的壓縮控制組態參數和可用於監控壓縮使用的資訊來源。它適用於經典的 MySQL 協定連線。

壓縮控制適用於用戶端程式連線到伺服器,以及參與來源/複本複寫或群組複寫的伺服器。壓縮控制不適用於 FEDERATED 資料表的連線。在以下討論中,用戶端連線是簡寫,代表來自任何支援壓縮來源的伺服器連線,除非內容指示特定的連線類型。

注意

與 MySQL 伺服器執行個體的 X 協定連線支援壓縮,但 X 協定連線的壓縮與此處描述的傳統 MySQL 協定連線的壓縮獨立運作,並單獨控制。請參閱第 22.5.5 節,「使用 X 外掛程式的連線壓縮」,以取得關於 X 協定連線壓縮的資訊。

設定連線壓縮

這些組態參數可用於控制連線壓縮

可啟用指定壓縮演算法的組態參數為字串值,並接受一個或多個以逗號分隔的壓縮演算法名稱清單,順序不拘,這些名稱可從以下項目中選擇(不區分大小寫)

  • zlib:允許使用 zlib 壓縮演算法的連線。

  • zstd:允許使用 zstd 壓縮演算法的連線。

  • uncompressed:允許未壓縮的連線。

注意

由於 uncompressed 是一個可能設定或不設定的演算法名稱,因此可以設定 MySQL 允許未壓縮的連線。

範例

  • 若要設定伺服器允許哪些壓縮演算法用於連入連線,請設定 protocol_compression_algorithms 系統變數。預設情況下,伺服器允許所有可用的演算法。若要在啟動時明確設定此選項,請在伺服器 my.cnf 檔案中使用以下幾行

    [mysqld]
    protocol_compression_algorithms=zlib,zstd,uncompressed

    若要在執行階段將 protocol_compression_algorithms 系統變數設定並持久化為該值,請使用以下陳述式

    SET PERSIST protocol_compression_algorithms='zlib,zstd,uncompressed';

    SET PERSIST 為正在執行的 MySQL 執行個體設定值。它也會儲存該值,使其可以延續到後續的伺服器重新啟動。若要變更正在執行的 MySQL 執行個體的值,而使其不會延續到後續的重新啟動,請使用 GLOBAL 關鍵字,而不是 PERSIST。請參閱 第 15.7.6.1 節,「SET 變數指派語法」

  • 若要僅允許使用 zstd 壓縮的連入連線,請像這樣在啟動時設定伺服器

    [mysqld]
    protocol_compression_algorithms=zstd

    或者,若要在執行階段進行變更

    SET PERSIST protocol_compression_algorithms='zstd';
  • 若要允許 mysql 用戶端起始 zlibuncompressed 連線,請像這樣叫用它

    mysql --compression-algorithms=zlib,uncompressed
  • 若要設定複本使用 zlibzstd 連線連線到來源,並為 zstd 連線使用壓縮等級 7,請使用 CHANGE REPLICATION SOURCE TO 陳述式

    CHANGE REPLICATION SOURCE TO
      SOURCE_COMPRESSION_ALGORITHMS = 'zlib,zstd',
      SOURCE_ZSTD_COMPRESSION_LEVEL = 7;

    這假設 replica_compressed_protocol 系統變數已停用,原因請參閱設定舊式連線壓縮

為了成功設定連線,連線的雙方必須同意彼此允許的壓縮演算法。演算法協商程序會嘗試使用 zlib,然後是 zstd,然後是 uncompressed。如果雙方都找不到共同的演算法,則連線嘗試會失敗。

由於雙方必須同意壓縮演算法,並且由於 uncompressed 是一個不一定允許的演算法值,因此不一定會回退到未壓縮的連線。例如,如果伺服器設定為允許 zstd,而用戶端設定為允許 zlib,uncompressed,則用戶端根本無法連線。在此情況下,雙方沒有共同的演算法,因此連線嘗試會失敗。

啟用指定 zstd 壓縮等級的設定參數會採用 1 到 22 的整數值,較大的值表示較高的壓縮等級。預設 zstd 壓縮等級為 3。壓縮等級設定對不使用 zstd 壓縮的連線沒有影響。

可設定的 zstd 壓縮等級可讓您選擇較少的網路流量和較高的 CPU 負載,或是較多的網路流量和較低的 CPU 負載。較高的壓縮等級會減少網路壅塞,但額外的 CPU 負載可能會降低伺服器效能。

設定舊式連線壓縮

在 MySQL 8.0.18 之前,這些設定參數可用於控制連線壓縮

  • 用戶端程式支援 --compress 命令列選項,以指定連線到伺服器時使用壓縮。

  • 對於使用 MySQL C API 的程式,啟用 mysql_options() 函式的 MYSQL_OPT_COMPRESS 選項,會指定連線到伺服器時使用壓縮。

  • 對於來源/複本複寫,啟用系統變數 replica_compressed_protocol,會指定複本連線到來源時使用壓縮。

在每種情況下,當指定使用壓縮時,如果雙方都允許,連線會使用 zlib 壓縮演算法,否則會回退到未壓縮的連線。

從 MySQL 8.0.18 開始,由於引入了額外的壓縮參數以更精確地控制連線壓縮(如設定連線壓縮中所述),因此剛才描述的壓縮參數會變成舊式參數。例外情況是 MySQL Shell,其中 --compress 命令列選項仍然有效,並且可用於要求壓縮,而無需選擇壓縮演算法。如需有關 MySQL Shell 連線壓縮控制的資訊,請參閱使用壓縮連線

舊式壓縮參數會與較新的參數互動,而且它們的語意會變更如下

監控連線壓縮

Compression 狀態變數為 ONOFF,表示目前連線是否使用壓縮。

如果目前連線已啟用壓縮,mysql 用戶端的 \status 命令會顯示一行,指出 Protocol: Compressed。如果沒有該行,則表示連線未壓縮。

MySQL Shell 的 \status 命令會顯示 Compression: 行,指出 DisabledEnabled,表示連線是否已壓縮。

這些額外的資訊來源可用於監控連線壓縮

  • 若要監控用戶端連線中使用的壓縮,請使用 Compression_algorithmCompression_level 狀態變數。對於目前連線,其值分別表示壓縮演算法和壓縮等級。

  • 若要判斷伺服器設定允許哪些壓縮演算法用於連入連線,請檢查 protocol_compression_algorithms 系統變數。

  • 對於來源/複本複寫連線,可從多個來源取得已設定的壓縮演算法和壓縮等級

    • Performance Schema replication_connection_configuration 表格具有 COMPRESSION_ALGORITHMSZSTD_COMPRESSION_LEVEL 資料行。

    • mysql.slave_master_info 系統表格具有 Master_compression_algorithmsMaster_zstd_compression_level 資料行。如果存在 master.info 檔案,則它也會包含這些值的幾行。