Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
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
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.