10bet网址
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr)- 26.8Mb
PDF (A4)- 26.8Mb


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であるにもかかわらず、圧縮は個別の行にではなく、テーブル全体およびそれに関連付けられたすべてのインデックスに適用されます。