設定ファイルに定義するデータファイルから、InnoDB
のテーブル領域が構成されます。これらのファイルは、単純に連結されてテーブル領域になります。ストライピングは使用されません。現時点では、テーブル領域のどの位置にテーブルが割り当てられるかを定義できません。しかし、新たに作成されるテーブル領域内では、InnoDB
が最初のデータファイルから領域を割り当てます。
テーブル領域は、デフォルトサイズが 16 K
バイトのデータベースページで構成されます。これらのページは、64
個の連続するページから成るサイズ 1M
バイトのエクステントにグループ化されます。InnoDB
では、テーブル領域内部の 「files」 を
セグメント
と呼びます。これは実際には多くのテーブル領域セグメントを含んでいるため、「ロールバックセグメント」という名前は、多少誤解を招くおそれがあります。
テーブル領域内でセグメントが大きくなると、InnoDB
はそのセグメントに最初の 32
ページを個別に割り当てます。InnoDB
はその後、エクステント全体をセグメントに割り当て始めます。InnoDB
ではデータの連続性を高めるため、大規模なセグメントには一度に最大
4 つのエクステントを追加できます。
InnoDB
では、各インデックスに 2
つのセグメントが割り当てられます。1 つは B
ツリーの非リーフノード用、もう 1
つはリーフノード用です。これには、データを含んでいるリーフノードで連続性を高める意図があります。
テーブル領域には、ほかのページのビットマップを含んだページがあるため、InnoDB
テーブル領域内のいくつかのエクステントは、全体としてではなく個別のページとしてのみセグメントに割り当てることができます。
SHOW TABLE STATUS
ステートメントを発行してテーブル領域内の空き領域を照会すると、InnoDB
からテーブル領域内の完全に空いているエクステントが報告されます。InnoDB
は、常にいくつかのエクステントをクリーンアップとその他の内部的な用途のために確保しており、これらのエクステントは空き領域に含まれません。
テーブルからデータを削除すると、InnoDB
によって対応する B
ツリーインデックスが縮小されます。これによって、ほかのユーザーが開放された領域を利用できるようになるかどうかは、削除のパターンがテーブル領域の個々のページやエクステントを開放するかどうかによって異なります。テーブルを破棄したり、またはテーブルからすべての行を削除すると、ほかのユーザーに確実に領域が解放されますが、削除された行は、トランザクションロールバックまたは一貫性読み取りでそのレコードが必要なくなったあとのパージ操作ではじめて物理的に削除されるということに注意してください(詳しくは
項9.9. 「InnoDB
マルチバージョン管理」を参照してください。)
可変長カラム
(VARBINARY
、VARCHAR
、BLOB
、および
TEXT
)
を除く行の最大長は、データベースページの半分よりも少し短くなります。これは、最大行長は約
8000
バイトであるということです。LONGBLOB
と LONGTEXT
カラムは 4G
バイト以下である必要があり、BLOB
と TEXT
カラムを含んだ合計行長は 4G
バイト以下でなければいけません。
長さが半ページ未満の行では、そのすべてがローカルのページ内に格納されます。半ページを超える行では、その行が半ページ以内に収まるように、可変長カラムが外部オフページストレージの対象として選択されます。オフページストレージの対象として選択されたカラムでは、InnoDB
は最初の 768
バイトをローカルの行内に格納し、残りを外部のオーバーフローページ内に格納します。そのようなカラムはそれぞれ、独自のオーバーフローページリストを持ちます。768
バイトの先頭部分に続く 20
バイトの値には、カラムの実際の長さと、値の残りの部分が格納されたオーバーフローページのリストへのポインタとが格納されます。
テーブル領域に関する情報を表示するには、テーブル領域モニターを使用します。項9.13.2. 「SHOW ENGINE
INNODB STATUS
と
InnoDB
モニター」
を参照してください。