サーバーへの接続では、クライアントとサーバー間のトラフィックの圧縮を使用して、接続を介して送信されるバイト数を減らすことができます。 デフォルトでは、接続は圧縮解除されますが、サーバーとクライアントが相互に許可された圧縮アルゴリズムに同意する場合は圧縮できます。
圧縮された接続はクライアント側で発生しますが、クライアント側とサーバー側の両方で 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, mysqlslap、mysqltest、および 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_ALGORITHMS
とSOURCE_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
システム変数が無効になっていることを前提としています。
接続を正常に設定するには、接続の両側が相互に許可された圧縮アルゴリズムに同意する必要があります。 アルゴリズム - ネゴシエーションプロセスでは、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
オプションを有効にすると、サーバーへの接続に圧縮を使用するように指定されます。ソース/レプリカレプリケーションの場合、
slave_compressed_protocol
システム変数を有効にすると、ソースへのレプリカ接続に圧縮の使用が指定されます。
いずれの場合も、圧縮の使用が指定されている場合、接続は zlib
圧縮アルゴリズムを使用します (両側で許可されている場合)。それ以外の場合は、圧縮されていない接続にフォールバックします。
MySQL 8.0.18 では、接続圧縮の構成 で説明されている接続圧縮をより詳細に制御するために導入された追加の圧縮パラメータのため、前述の圧縮パラメータはレガシーパラメータになります。 例外は MySQL Shell で、--compress
コマンドラインオプションは現在のままで、圧縮アルゴリズムを選択せずに圧縮をリクエストするために使用できます。 MySQL Shell の接続圧縮制御の詳細は、圧縮接続の使用 を参照してください。
レガシー圧縮パラメータは、次のように新しいパラメータと対話し、そのセマンティクスが変更されます:
-
レガシー
--compress
オプションの意味は、--compression-algorithms
が指定されているかどうかによって異なります:--compression-algorithms
が指定されていない場合、--compress
はzlib,uncompressed
のクライアント側アルゴリズムセットを指定することと同等です。--compression-algorithms
が指定されている場合、--compress
はzlib
のアルゴリズムセットを指定することと同等であり、完全なクライアント側アルゴリズムセットはzlib
の和集合に--compression-algorithms
で指定されたアルゴリズムを加えたものです。 たとえば、--compress
と--compression-algorithms=zlib,zstd
の両方で許可されるアルゴリズムセットは、zlib
とzlib,zstd
(zlib,zstd
) の組合せです。--compress
と--compression-algorithms=zstd,uncompressed
の両方で許可されるアルゴリズムセットは、zlib
とzstd,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
ファイルが存在する場合は、それらの値の行も含まれます。