例 15.1 圧縮情報スキーマテーブルの使用
圧縮テーブルを含むデータベースからのサンプル出力を次に示します (セクション15.9「InnoDB のテーブルおよびページの圧縮」、INNODB_CMP
、INNODB_CMP_PER_INDEX
、および INNODB_CMPMEM
を参照してください)。
次の表は、軽いワークロード下にある INFORMATION_SCHEMA.INNODB_CMP
の内容を示しています。 バッファープールに含まれている唯一の圧縮ページサイズは 8K です。 カラム COMPRESS_TIME
および UNCOMPRESS_TIME
が 0 であるため、ページの圧縮または圧縮解除で消費された時間は統計がリセットされてから 1 秒未満でした。
page size | compress ops | compress ops ok | compress time | uncompress ops | uncompress time |
---|---|---|---|---|---|
1024 | 0 | 0 | 0 | 0 | 0 |
2048 | 0 | 0 | 0 | 0 | 0 |
4096 | 0 | 0 | 0 | 0 | 0 |
8192 | 1048 | 921 | 0 | 61 | 0 |
16384 | 0 | 0 | 0 | 0 | 0 |
INNODB_CMPMEM
によると、バッファープール内には 6169 個の圧縮された 8K バイトページが存在します。 割り当てられているほかのブロックサイズは 64 バイトだけです。 INNODB_CMPMEM
内のもっとも小さい PAGE_SIZE
は、対応する圧縮解除されたページがバッファープール内に存在しない圧縮ページのブロックディスクリプタとして使用されます。 このようなページが 5910 個存在することがわかります。 また、間接的には、259 (6169-5910) 個の圧縮ページもバッファープール内に圧縮解除された形式で存在することがわかります。
次の表は、軽いワークロード下にある INFORMATION_SCHEMA.INNODB_CMPMEM
の内容を示しています。 圧縮ページのためのメモリーアロケータの断片化のために、一部のメモリー SUM(PAGE_SIZE*PAGES_FREE)=6784
は使用できません。 これは、小さなメモリー割り当て要求が、バディーアロケーションシステムを使用して (メインのバッファープールから割り当てられる 16K ブロックから始めて) より大きなブロックを分割することによって満たされるためです。 断片化がこのように少ないのは、より大きな隣接した空きブロックを形成するために、割り当てられた一部のブロックが再配置 (コピー) されたためです。 この SUM(PAGE_SIZE*RELOCATION_OPS)
バイトのコピーで消費された時間は 1 秒未満でした ((SUM(RELOCATION_TIME)=0)
)。