MySQLを運用していると、
今回はその中から、
関数によるデータ圧縮
はじめに、
データ圧縮を行うのはCOMPRESS
関数です。指定した文字列をzlibで圧縮して、UNCOMPRESS
関数を使用します。
文字コードの変換など発生を防ぐために、
mysql> CREATE TABLE compress (col1 blob); Query OK, 0 rows affected (0.02 sec) mysql> INSERT INTO compress(col1) values (COMPRESS(REPEAT('C',10))); Query OK, 1 row affected (0.00 sec) mysql> SELECT UNCOMPRESS(col1) FROM compress; +------------------+ | UNCOMPRESS(col1) | +------------------+ | CCCCCCCCCC | +------------------+ 1 row in set (0.00 sec)
(mysqlコマンドに--skip-binary-as-hex
オプションを設定して実行しています)
詳しくは、
テーブル圧縮
InnoDBでは2種類の圧縮機能を提供しています。
圧縮テーブル
設定されたinnodb_
CREATE TABLEステートメントにROW_
句を使用してテーブルを作成します。file-per-tableと一般テーブルスペースに適用可能です。
mysql> CREATE TABLE comp1 (col1 int) ROW_FORMAT=COMPRESSED;
詳しくは、
透過的ページ圧縮
指定された圧縮アルゴリズムを利用してページを圧縮し、zlib
またはlz4
の指定ができます。
MySQL 5.
mysql> CREATE TABLE comp2 (col1 int) COMPRESSION='zlib';
OSのスパースファイルなどの機能を使って圧縮するため、
圧縮テーブルと透過的ページ圧縮を比べると、
バイナリログ圧縮
続いて、binlog_
システム変数をONにすることで、
mysql> SET GLOBAL binlog_transaction_compression=ON; Query OK, 0 rows affected (0.00 sec)
binlog_
システム変数を使用して、
また、binary_
テーブルから統計の確認ができます。
詳しくは、
トラフィック圧縮
クライアントとサーバー間のトラフィックを圧縮し、
MySQL 8.0.17とそれ以前(レガシー接続圧縮)
MySQL 8.
- クライアントプログラムの--compressコマンドラインオプション
- MySQL C APIのmysql_
options()関数のMYSQL_ OPT_ COMPRESSオプション - レプリケーションのslave_
compressed_ protocolシステム変数
レガシー接続圧縮はMySQL 8.
MySQL 8.0.18とそれ以降(protocol_compression_algorithms
)
protocol_compression_algorithms
)MySQL 8.protocol_
システム変数にて制御するようになっています。変数には許可する圧縮アルゴリズムをカンマ区切りで指定できるようになっており、zlib,zstd,uncompressed
となっています。つまり、
このシステム変数はクライアントとサーバ間、
接続を正常に設定するには、
$ mysql --compression-algorithms=zlib mysql> show status like 'Compression_algorithm'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | Compression_algorithm | zlib | +-----------------------+-------+
Compression_
ステータス変数からどの圧縮アルゴリズムで接続しているかわかります。
CHANGE REPLICATION SOURCE TO SOURCE_COMPRESSION_ALGORITHMS = 'zlib' ....
トラフィック圧縮についての詳細は、
まとめ
今回はMySQLが提供している圧縮機能をまとめて紹介しました。圧縮機能は圧縮していないよりもCPUを多く使うなどパフォーマンスに影響があります。パフォーマンスを最優先にするなら圧縮は無効にしたほうがいいでしょう。それぞれ概要だけの説明ではありましたが、