テーブルの容量がデカくなってしまう場合に、Compressを使って圧縮し、容量を軽くする手順を載せておきます
今回はWindows上でMySQLを動かしている場合の手順です
事前の準備
テーブルの圧縮が使える設定になっているかを以下のコマンドで確認します
SHOW VARIABLES LIKE 'innodb_file_per_table'; SHOW VARIABLES LIKE 'innodb_file_format';
実行してみます
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を指定すると、半分くらいになるってことらしいです
が、圧縮効率とかテーブルによってまちまちなので、どの値が適正か確認してみます
以下のテーブルで実験
ちょっとわかりにくくて申し訳ないですが、以下が対象です
テーブル名 | ファイル名 | ファイルシステム上のサイズ(圧縮前) |
---|---|---|
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に設定!
こんな感じで適正値を確認してみてください~