このページは機械翻訳したものです。
サーバーへの接続では、クライアントとサーバー間のトラフィックの圧縮を使用して、接続を介して送信されるバイト数を減らすことができます。 デフォルトでは、接続は圧縮解除されますが、サーバーとクライアントが相互に許可された圧縮アルゴリズムに同意する場合は圧縮できます。
圧縮された接続はクライアント側で発生しますが、クライアント側とサーバー側の両方で 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ファイルが存在する場合は、それらの値の行も含まれます。