MySQL – Compressでデカいテーブルを圧縮

テーブルの容量がデカくなってしまう場合に、Compressを使って圧縮し、容量を軽くする手順を載せておきます

今回はWindows上でMySQLを動かしている場合の手順です

事前の準備

テーブルの圧縮が使える設定になっているかを以下のコマンドで確認します

SHOW VARIABLES LIKE 'innodb_file_per_table';
SHOW VARIABLES LIKE 'innodb_file_format';

実行してみます

001_innodb_conf

 

innodb_file_per_tableはONになっているのでOK
innodb_file_formatはAntelopeになっていますが、このままだとNGなので、Barracudaに変えます

コマンドで変更できます

SET GLOBAL innodb_file_format=Barracuda;

が、再起動すると元に戻ってしまったりするので、my.iniに追記しておきましょう
windows 10なら以下のディレクトリにあるはず

C:\ProgramData\MySQL\MySQL Server 5.6\my.ini

以下を追記(既に存在すればBarracudaに変更)
# Compress setting
innodb_file_format = Barracuda

確認コマンドでBarracudaになっていればOK

 

圧縮実行

準備はOKなので、テーブルを圧縮します
以下のコマンドで!

ALTER TABLE `table_name` ROW_FORMAT=Compressed KEY_BLOCK_SIZE=8;

KEY_BLOCK_SIZEでページサイズを指定できます
ページサイズは1、2、4、8、16が指定可能

デフォルトは16KBなので、8KBを指定すると、半分くらいになるってことらしいです
が、圧縮効率とかテーブルによってまちまちなので、どの値が適正か確認してみます

以下のテーブルで実験

002_show_table_before

003_file_size_before

ちょっとわかりにくくて申し訳ないですが、以下が対象です

テーブル名 ファイル名 ファイルシステム上のサイズ(圧縮前)
user_log_bkup user_log_bkup.ibd 3,088,384KB
user_log_bkup_2 user_log_bkup_2.ibd 3,088,384KB
user_log_bkup_3 user_log_bkup_3.ibd 3,088,384KB

上記の3テーブルをそれぞれ8KB、4KB、2KBで圧縮してみます
画像は省略しますが、結果以下のようになりました

テーブル名 ページサイズ ファイルシステム上のサイズ(圧縮後) どうなった?
user_log_bkup 8KB 1,437,696KB 半分くらいになった
user_log_bkup_2 4KB 729,088KB さらに半分くらいになった
user_log_bkup_3 2KB 864,256KB 4KBより増えちゃった

みたいな感じで試してみると、どのサイズが適正なのか調べられると思います
今回の実験対象のuser_logテーブルは4KBがよさそうだったんで、4KBに設定!

こんな感じで適正値を確認してみてください~

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です