MySQL5.5 InnoDBの圧縮

ブログ | 2011/9/30 01:34
InnoDB pluginで圧縮できるらしいので、トライ。
MySQL5.1だと、phpMyAdminの操作で、Compressedを選べたのだけれど、MySQL5.5だと選べない。なぜ?

とりあえず、コマンドラインで、
mysql> ALTER TABLE test ROW_FORMAT=Compressed;  

mysql> SHOW TABLE STATUS LIKE 'test' \G;
*************************** 1. row ***************************
          Name: test
        Engine: InnoDB
       Version: 10
    Row_format: Compact
          Rows: 0
Avg_row_length: 0
   Data_length: 16384
Max_data_length: 0
  Index_length: 0
     Data_free: 0
Auto_increment: 1
   Create_time: 2011-09-30 00:23:56
   Update_time: NULL
    Check_time: NULL
     Collation: utf8_general_ci
      Checksum: NULL
Create_options: row_format=COMPRESSED
       Comment:

上の、Row_formatがCompactのままで、どうも怪しい。
http://dev.mysql.com/doc/innodb/1.1/en/innodb-co...
で調べても、なんとなくエラーっぽい。

mysql> SET GLOBAL innodb_file_format=Barracuda;
でいけた。

MySQL5.5の場合も、my.cnfに
innodb_file_per_table
innodb_file_format=Barracuda
が必要。
事前検索では、5.5はデフォルトがBarracudaだからか、記述なしみたいな説明が多かったのだけれど。

で、下記を参考に、実際圧縮してみる。
http://d.hatena.ne.jp/sh2/20090628

ALTER TABLE test ROW_FORMAT=Compressed KEY_BLOCK_SIZE=8;
だと、確かに半分、
ALTER TABLE test ROW_FORMAT=Compressed KEY_BLOCK_SIZE=4;
だと、1/4くらいになった(ならないものもあった)。

それなりに時間はかかる。563M→245Mになるのに、4分くらいでした。

パフォーマンスも悪くない気がする。速くなった感じすらする。
転置インデックスのテーブルなんかは、とても肥大化するから、KEY_BLOCK_SIZE=4で圧縮していこうと思う。(ALTER TABLE時も、Lockされてる様子はないので、気にせずやってしまっていいのではなかろうか)
▼追記 2011/9/30 11:04
転置インデックスは、KEY_BLOCK_SIZE=4 だとあまり圧縮されなかった(8Gが7.5G程度)ので、KEY_BLOCK_SIZE=8 にする。
▼追記 2011/9/30 12:18
裏で走らせてたら、落ちましたがな。
やっぱり深夜にやろう。
縮小 拡大

ログインしておくと、後で編集が可能です。

Rottel内コンテンツ

ユーザー一覧

Rottelとは?
利用規約
開発飲料
利用者の声
ヘルプ
close