Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


14.7.2 テーブル圧縮の有効化

圧縮テーブルを作成する前に、innodb_file_per_table 構成オプションが有効になっていること、および innodb_file_formatBarracuda に設定されていることを確認してください。これらのパラメータは、MySQL 構成ファイル my.cnf または my.ini で設定することも、MySQL サーバーをシャットダウンせずに SET ステートメントを使用して設定することもできます。

テーブルの圧縮を有効にするには、CREATE TABLE または ALTER TABLE ステートメントで ROW_FORMAT=COMPRESSED 句、KEY_BLOCK_SIZE 句、またはその両方を使用します。

圧縮テーブルを作成するには、次のようなステートメントを使用するとよいでしょう。

SET GLOBAL innodb_file_per_table=1;
SET GLOBAL innodb_file_format=Barracuda;
CREATE TABLE t1
 (c1 INT PRIMARY KEY) 
 ROW_FORMAT=COMPRESSED 
 KEY_BLOCK_SIZE=8;
  • ROW_FORMAT=COMPRESSED を指定する場合は、KEY_BLOCK_SIZE を省略できます。innodb_page_size 値の半分であるデフォルトのページサイズ値が使用されます。

  • KEY_BLOCK_SIZE を指定する場合は、ROW_FORMAT=COMPRESSED を省略できます。圧縮は自動的に有効になります。

  • KEY_BLOCK_SIZE の最適な値を決定するには、一般に、この句にさまざまな値を指定した同じテーブルのコピーをいくつか作成してから、結果として生成される .ibd ファイルのサイズを計測し、現実的なワークロードで各動作のパフォーマンスを確認します。

  • KEY_BLOCK_SIZE 値は、ヒントとして処理されます。InnoDB では、必要に応じて異なるサイズが使用される可能性があります。値 0 は、innodb_page_size 値の半分であるデフォルトの圧縮済みページサイズを表します。KEY_BLOCK_SIZE は、innodb_page_size 値以下にしかできません。innodb_page_size 値を超える値を指定した場合は、指定された値が無視され、警告が発行されます。また、KEY_BLOCK_SIZEinnodb_page_size 値の半分に設定されます。innodb_strict_mode=ON の場合、無効な KEY_BLOCK_SIZE 値を指定するとエラーが返されます。

  • パフォーマンス関連の追加の構成オプションについては、セクション14.7.3「InnoDB テーブルの圧縮の調整」を参照してください。

InnoDB データページのデフォルトの非圧縮サイズは、16K バイトです。オプション値の組み合わせに応じて、MySQL ではテーブルの .ibd ファイルに対応した 1K バイト、2K バイト、4K バイト、8K バイト、または 16K バイトのページサイズが使用されます。実際の圧縮アルゴリズムは、KEY_BLOCK_SIZE 値の影響を受けません。この値によって、各圧縮済みチャンクの大きさが決定されるため、各圧縮済みページに詰め込むことができる行数が影響を受けます。

一般に、KEY_BLOCK_SIZEInnoDBページサイズに等しい値に設定しても、大量の圧縮は発生しません。たとえば、InnoDBページサイズは 16K バイトであるため、一般に KEY_BLOCK_SIZE=16 を設定しても、大量の圧縮は発生しません。多くの場合、このような値で適切に圧縮されるため、この設定は多くの長い BLOBVARCHAR、または TEXT カラムを持つテーブルで引き続き役立つことがあります。したがって、セクション14.7.5「InnoDB テーブルでの圧縮の動作」で説明したように、必要となるオーバーフローページが少なくなる可能性もあります。

テーブルのすべてのインデックス (クラスタ化されたインデックスを含む) は、CREATE TABLE または ALTER TABLE ステートメントで指定されたものと同じページサイズを使用して圧縮されます。ROW_FORMATKEY_BLOCK_SIZE などのテーブル属性は、InnoDB テーブルの CREATE INDEX 構文の一部ではないため、指定しても無視されます (ただし、SHOW CREATE TABLE ステートメントの出力には表示されます)。

圧縮テーブル上の制約

バージョン 5.1 よりも前の MySQL では圧縮テーブルを処理できないため、圧縮を使用するには、偶然に互換性の問題が発生することを回避するために、innodb_file_format=Barracuda 構成パラメータを指定する必要があります。

テーブルの圧縮は、InnoDB のシステムテーブルスペースでも使用できません。システムテーブルスペース (スペース 0、ibdata* ファイル) にはユーザーデータを含めることができますが、内部システム情報も含まれているため、圧縮されません。そのため、圧縮は独自のテーブルスペースに格納されているテーブル (およびインデックス) にのみ適用されます。つまり、innodb_file_per_table オプションが有効になっている状態で作成されます。

句の名前が ROW_FORMAT であるにもかかわらず、圧縮は個別の行にではなく、テーブル全体およびそれに関連付けられたすべてのインデックスに適用されます。


User Comments
Sign Up Login You must be logged in to post a comment.