設定ファイルに定義するデータ
ファイルから、InnoDB
のテーブル
スペースが構成されます。これらのファイルは、単純に連結されてテーブルスペースになります。ストライピングは使用されません。現時点では、テーブルスペースのどの位置にテーブルが割り当てられるかを定義できません。しかし、新たに作成されるテーブルスペース内では、InnoDB
が最初のデータ
ファイルから領域を割り当てます。
テーブルスペースは、デフォルト サイズが16 KB
のデータベース ページで構成されます。
これらのページは、64個の連続するページから成るエクステントにグループ化されます。InnoDB
では、テーブルスペース内部の 「files」
を セグメント
と呼びます。これは実際には多くのテーブルスペース
セグメントを含んでいる為、「ロールバック
セグメント」という名前は、多少誤解を招くおそれがあります。
InnoDB
では、各インデックスに2つのセグメントが割り当てられます。1つは
B ツリーの非リーフ ノード用、もう1つはリーフ
ノード用です。これには、データを含んでいるリーフ
ノードで連続性を高める意図があります。
テーブルスペース内でセグメントが大きくなると、InnoDB
はそのセグメントに最初の32ページを個別に割り当てます。InnoDB
はその後、エクステント全体をセグメントに割り当て始めます。InnoDB
では、データの連続性を確保する為に、大きなセグメントに一度に最大4つのエクステントを追加できます。
テーブルスペースには、他のページのビットマップを含んだページがある為、InnoDB
テーブルスペース内のいくつかのエクステントは、全体としてではなく個別のページとしてのみセグメントに割り当てる事ができます。
SHOW TABLE STATUS
ステートメントを発行してテーブルスペース内の空き領域を照会すると、InnoDB
からテーブルスペース内の完全に空いているエクステントが報告されます。InnoDB
は、常にいくつかのエクステントをクリーンアップとその他の内部的な用途の為に確保しており、これらのエクステントは空き領域に含まれません。
テーブルからデータを削除すると、InnoDB
によって対応する B ツリー
インデックスが縮小されます。これによって、他のユーザが開放された領域を利用できるようになるかどうかは、削除のパターンがテーブルスペースの個々のページやエクステントを開放するかどうかによって異なります。テーブルを破棄したり、またはテーブルからすべての行を削除すると、他のユーザに確実に領域が解放されますが、削除された行は、トランザクション
ロールバックまたは一貫した読み取りでそのレコードが必要なくなった後のパージ操作で初めて物理的に削除されるという事に注意してください(詳しくは
項13.5.12. 「マルチバージョンの実装」
を参照してください。)