MySQL 8.0 リファレンスマニュアル


4.2.8 接続圧縮制御

サーバーへの接続では、クライアントとサーバー間のトラフィックの圧縮を使用して、接続を介して送信されるバイト数を減らすことができます。 デフォルトでは、接続は圧縮解除されますが、サーバーとクライアントが相互に許可された圧縮アルゴリズムに同意する場合は圧縮できます。

圧縮された接続はクライアント側で発生しますが、クライアント側とサーバー側の両方で CPU 負荷に影響します。これは、両側で圧縮および解凍操作が実行されるためです。 圧縮を有効にするとパフォーマンスが低下するため、主にネットワーク帯域幅が低く、ネットワーク転送時間が圧縮および解凍操作のコストを支配し、結果セットが大きい場合に利点が生じます。

このセクションでは、使用可能な圧縮制御構成パラメータと、圧縮の使用を監視するために使用できる情報ソースについて説明します。 クラシック MySQL プロトコル 接続に適用されます。

圧縮制御は、クライアントプログラムおよびソース/レプリカレプリケーションまたはグループレプリケーションに参加しているサーバーによるサーバーへの接続に適用されます。 圧縮制御は、FEDERATED テーブルの接続には適用されません。 次の説明では、コンテキストに特定の接続タイプが指定されていないかぎり、「クライアント接続」は圧縮がサポートされている任意のソースからのサーバーへの接続の短縮形です。

注記

MySQL Server インスタンスへの X プロトコル 接続では、MySQL 8.0.19 からの圧縮がサポートされますが、X プロトコル 接続の圧縮は、ここで説明する クラシック MySQL プロトコル 接続の圧縮とは独立して動作し、個別に制御されます。 X プロトコル 接続圧縮の詳細は、セクション20.5.5「X プラグイン での接続圧縮」 を参照してください。

接続圧縮の構成

MySQL 8.0.18 では、次の構成パラメータを使用して接続圧縮を制御できます:

  • protocol_compression_algorithms システム変数は、サーバーが受信接続に対して許可する圧縮アルゴリズムを構成します。

  • --compression-algorithms および --zstd-compression-level のコマンドラインオプションは、これらのクライアントプログラムに許可される圧縮アルゴリズムおよび zstd 圧縮レベルを構成: mysql, mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlpump, mysqlshow, mysqlslapmysqltest、および mysql_upgrade。MySQL Shell には、8.0.20 リリースの次のコマンドラインオプションも用意されています。

  • mysql_options() 関数の MYSQL_OPT_COMPRESSION_ALGORITHMS および MYSQL_OPT_ZSTD_COMPRESSION_LEVEL オプションでは、MySQL C API を使用するクライアントプログラムの許可された圧縮アルゴリズムおよび zstd 圧縮レベルを構成します。

  • CHANGE MASTER TO ステートメントの MASTER_COMPRESSION_ALGORITHMS および MASTER_ZSTD_COMPRESSION_LEVEL オプションでは、ソース/レプリカレプリケーションに参加するレプリカサーバーの許可された圧縮アルゴリズムおよび zstd 圧縮レベルを構成します。 MySQL 8.0.23 から、かわりにステートメント CHANGE REPLICATION SOURCE TO およびオプション SOURCE_COMPRESSION_ALGORITHMSSOURCE_ZSTD_COMPRESSION_LEVEL を使用します。

  • group_replication_recovery_compression_algorithm および group_replication_recovery_zstd_compression_level システム変数は、新しいメンバーがグループに参加してドナーに接続したときに、グループレプリケーションリカバリ接続に対して許可される圧縮アルゴリズムおよび zstd 圧縮レベルを構成します。

圧縮アルゴリズムの指定を可能にする構成パラメータは文字列値で、次の項目から任意の順序で選択された 1 つ以上のカンマ区切りの圧縮アルゴリズム名のリストを取ります (大/小文字は区別されません):

  • zlib: zlib 圧縮アルゴリズムを使用する接続を許可します。

  • zstd: zstd 圧縮アルゴリズム (zstd 1.3) を使用する接続を許可します。

  • 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 インスタンスの値を変更するには、PERSIST ではなく GLOBAL キーワードを使用します。 セクション13.7.6.1「変数代入の SET 構文」を参照してください。

  • zstd 圧縮を使用する着信接続のみを許可するには、起動時に次のようにサーバーを構成します:

    [mysqld]
    protocol_compression_algorithms=zstd

    または、実行時に変更を行うには:

    SET PERSIST protocol_compression_algorithms='zstd';
  • mysql クライアントが zlib または uncompressed 接続を開始できるようにするには、次のように呼び出します:

    mysql --compression-algorithms=zlib,uncompressed
  • zlib または zstd 接続を使用して、zstd 接続用に圧縮レベル 7 でソースに接続するようにレプリカを構成するには、CHANGE REPLICATION SOURCE TO ステートメント (MySQL 8.0.23 から) または CHANGE MASTER TO ステートメント (MySQL 8.0.23 より前) を使用します:

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

    これは、レガシー接続圧縮の構成 で説明されている理由で、slave_compressed_protocol システム変数が無効になっていることを前提としています。

接続を正常に設定するには、接続の両側が相互に許可された圧縮アルゴリズムに同意する必要があります。 アルゴリズム - ネゴシエーションプロセスでは、zlibzstduncompressed の順に使用しようとします。 両側で共通アルゴリズムが見つからない場合、接続の試行は失敗します。

どちらの側も圧縮アルゴリズムに同意する必要があるため、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 オプションを有効にすると、サーバーへの接続に圧縮を使用するように指定されます。

  • ソース/レプリカレプリケーションの場合、slave_compressed_protocol システム変数を有効にすると、ソースへのレプリカ接続に圧縮の使用が指定されます。

いずれの場合も、圧縮の使用が指定されている場合、接続は zlib 圧縮アルゴリズムを使用します (両側で許可されている場合)。それ以外の場合は、圧縮されていない接続にフォールバックします。

MySQL 8.0.18 では、接続圧縮の構成 で説明されている接続圧縮をより詳細に制御するために導入された追加の圧縮パラメータのため、前述の圧縮パラメータはレガシーパラメータになります。 例外は MySQL Shell で、--compress コマンドラインオプションは現在のままで、圧縮アルゴリズムを選択せずに圧縮をリクエストするために使用できます。 MySQL Shell の接続圧縮制御の詳細は、圧縮接続の使用 を参照してください。

レガシー圧縮パラメータは、次のように新しいパラメータと対話し、そのセマンティクスが変更されます:

  • レガシー --compress オプションの意味は、--compression-algorithms が指定されているかどうかによって異なります:

    • --compression-algorithms が指定されていない場合、--compresszlib,uncompressed のクライアント側アルゴリズムセットを指定することと同等です。

    • --compression-algorithms が指定されている場合、--compresszlib のアルゴリズムセットを指定することと同等であり、完全なクライアント側アルゴリズムセットは zlib の和集合に --compression-algorithms で指定されたアルゴリズムを加えたものです。 たとえば、--compress--compression-algorithms=zlib,zstd の両方で許可されるアルゴリズムセットは、zlibzlib,zstd(zlib,zstd) の組合せです。 --compress--compression-algorithms=zstd,uncompressed の両方で許可されるアルゴリズムセットは、zlibzstd,uncompressed(zlib,zstd,uncompressed) の組合せです。

  • レガシー MYSQL_OPT_COMPRESS オプションと mysql_options() C API 関数の MYSQL_OPT_COMPRESSION_ALGORITHMS オプションの間では、同じタイプの相互作用が発生します。

  • slave_compressed_protocol システム変数が有効になっている場合、MASTER_COMPRESSION_ALGORITHMS よりも優先され、ソースとレプリカの両方でそのアルゴリズムが許可されている場合は、ソースへの接続で zlib 圧縮が使用されます。 slave_compressed_protocol が無効な場合は、MASTER_COMPRESSION_ALGORITHMS の値が適用されます。

注記

レガシー圧縮制御パラメータは、MySQL 8.0.18 では非推奨です。MySQL の将来のバージョンでは削除される予定です。

接続圧縮の監視

Compression ステータス変数は ON または OFF で、現在の接続で圧縮が使用されるかどうかを示します。

mysql クライアントの\status コマンドは、現在の接続に対して圧縮が有効になっている場合に Protocol: Compressed を示す行を表示します。 その行が存在しない場合、接続は圧縮解除されます。

8.0.14 では、MySQL Shell \status コマンドにより、Disabled または Enabled という Compression:行が表示され、接続が圧縮されているかどうかが示されます。

MySQL 8.0.18 では、次の追加情報ソースを使用して接続圧縮を監視できます:

  • クライアント接続に使用されている圧縮を監視するには、Compression_algorithm および Compression_level のステータス変数を使用します。 現在の接続の場合、その値はそれぞれ圧縮アルゴリズムと圧縮レベルを示します。

  • サーバーが着信接続を許可するように構成されている圧縮アルゴリズムを判別するには、protocol_compression_algorithms システム変数を確認します。

  • ソース/レプリカレプリケーション接続の場合、構成済の圧縮アルゴリズムおよび圧縮レベルは複数のソースから使用できます:

    • パフォーマンススキーマ replication_connection_configuration テーブルには、COMPRESSION_ALGORITHMS および ZSTD_COMPRESSION_LEVEL カラムがあります。

    • mysql.slave_master_info システムテーブルには、Master_compression_algorithms カラムと Master_zstd_compression_level カラムがあります。 master.info ファイルが存在する場合は、それらの値の行も含まれます。


関連キーワード:  圧縮, 接続, アルゴリズム, サーバー, zstd, 構成, zlib, 許可, プログラム, compression