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.1 テーブル圧縮の概要

プロセッサおよびキャッシュメモリーは、ディスクストレージデバイスよりも速度が上昇しているため、多くのワークロードがディスクバウンドになります。データ圧縮を使用すると、データベースのサイズが小さくなり、I/O が削減され、スループットが改善されますが、CPU 使用率が上昇するという少しの犠牲が伴います。圧縮は、頻繁に使用されるデータをメモリー内に保持するために十分な RAM が搭載されたシステム上で、読み取り負荷の高いアプリケーションを実行する際に、特に有効です。

ROW_FORMAT=COMPRESSED で作成された InnoDB テーブルでは、通常の 16K バイトのデフォルトよりも小さいページサイズをディスク上で使用できます。ページが小さいほど、ディスクから読み取られる I/O とディスクに書き込まれる I/O が少なくなるため、SSD デバイスを使用する際に、特に有効です。

ページサイズは、KEY_BLOCK_SIZE パラメータを使用して指定されます。ページサイズが異なる場合は、テーブルをシステムテーブルスペース内でなく、独自の .ibd ファイルに格納する必要があります。そのためには、innodb_file_per_table オプションを有効にする必要があります。圧縮レベルは、KEY_BLOCK_SIZE の値に関係なく同じです。KEY_BLOCK_SIZE に小さい値を指定するほど、徐々にページが小さくなるという I/O の利点が得られます。ただし、小さすぎる値を指定すると、各ページ内に複数の行を収容できるほど十分にデータ値を圧縮できない場合に、ページを再編成するための追加のオーバーヘッドが発生します。そのインデックスごとのキーカラムの長さに基づいて、どのくらい小さい KEY_BLOCK_SIZE をテーブルに指定できるのかについて、ハード制限が課されています。小さすぎる値を指定すると、CREATE TABLE または ALTER TABLE ステートメントが失敗します。

バッファープールには、圧縮済みデータが KEY_BLOCK_SIZE の値に基づいたページサイズの小さなページで保持されます。カラム値を抽出または更新すると、MySQL のバッファープールには、非圧縮データを含む 16K バイトのページも作成されます。バッファープール内では、非圧縮ページへの更新が同等の圧縮済みページに再度書き込まれます。圧縮済みページと非圧縮ページの両方の追加データが収容されるように、バッファーページのサイズを変更する必要がある場合もあります。ただし、非圧縮のページは、領域が必要になるとバッファープールから解放され、次のアクセス時に再度圧縮が解除されます。


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