InnoDB
表モニターは、InnoDB
内部データ辞書の内容を出力します。
出力には、テーブルごとにセクションが 1
つずつ含まれます。SYS_FOREIGN
および SYS_FOREIGN_COLS
セクションは、外部キーに関する情報を管理する内部データ辞書テーブルに対するものです。また、表モニターテーブルやユーザーによって作成された各
InnoDB
テーブルに対するセクションも存在します。次の
2 つのテーブルを
test
データベース内で作成したとします。
CREATE TABLE parent
(
par_id INT NOT NULL,
fname CHAR(20),
lname CHAR(20),
PRIMARY KEY (par_id),
UNIQUE INDEX (lname, fname)
) ENGINE = INNODB;
CREATE TABLE child
(
par_id INT NOT NULL,
child_id INT NOT NULL,
name VARCHAR(40),
birth DATE,
weight DECIMAL(10,2),
misc_info VARCHAR(255),
last_update TIMESTAMP,
PRIMARY KEY (par_id, child_id),
INDEX (name),
FOREIGN KEY (par_id) REFERENCES parent (par_id)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE = INNODB;
このとき、表モニターの出力は次のようになります (書式を若干変更)。
===========================================
090420 12:09:32 INNODB TABLE MONITOR OUTPUT
===========================================
--------------------------------------
TABLE: name SYS_FOREIGN, id 0 11, columns 7, indexes 3, appr.rows 1
COLUMNS: ID: DATA_VARCHAR DATA_ENGLISH len 0;
FOR_NAME: DATA_VARCHAR DATA_ENGLISH len 0;
REF_NAME: DATA_VARCHAR DATA_ENGLISH len 0;
N_COLS: DATA_INT len 4;
DB_ROW_ID: DATA_SYS prtype 256 len 6;
DB_TRX_ID: DATA_SYS prtype 257 len 6;
INDEX: name ID_IND, id 0 11, fields 1/6, uniq 1, type 3
root page 46, appr.key vals 1, leaf pages 1, size pages 1
FIELDS: ID DB_TRX_ID DB_ROLL_PTR FOR_NAME REF_NAME N_COLS
INDEX: name FOR_IND, id 0 12, fields 1/2, uniq 2, type 0
root page 47, appr.key vals 1, leaf pages 1, size pages 1
FIELDS: FOR_NAME ID
INDEX: name REF_IND, id 0 13, fields 1/2, uniq 2, type 0
root page 48, appr.key vals 1, leaf pages 1, size pages 1
FIELDS: REF_NAME ID
--------------------------------------
TABLE: name SYS_FOREIGN_COLS, id 0 12, columns 7, indexes 1, appr.rows 1
COLUMNS: ID: DATA_VARCHAR DATA_ENGLISH len 0;
POS: DATA_INT len 4;
FOR_COL_NAME: DATA_VARCHAR DATA_ENGLISH len 0;
REF_COL_NAME: DATA_VARCHAR DATA_ENGLISH len 0;
DB_ROW_ID: DATA_SYS prtype 256 len 6;
DB_TRX_ID: DATA_SYS prtype 257 len 6;
INDEX: name ID_IND, id 0 14, fields 2/6, uniq 2, type 3
root page 49, appr.key vals 1, leaf pages 1, size pages 1
FIELDS: ID POS DB_TRX_ID DB_ROLL_PTR FOR_COL_NAME REF_COL_NAME
--------------------------------------
TABLE: name test/child, id 0 14, columns 10, indexes 2, appr.rows 201
COLUMNS: par_id: DATA_INT DATA_BINARY_TYPE DATA_NOT_NULL len 4;
child_id: DATA_INT DATA_BINARY_TYPE DATA_NOT_NULL len 4;
name: DATA_VARCHAR prtype 524303 len 40;
birth: DATA_INT DATA_BINARY_TYPE len 3;
weight: DATA_FIXBINARY DATA_BINARY_TYPE len 5;
misc_info: DATA_VARCHAR prtype 524303 len 255;
last_update: DATA_INT DATA_UNSIGNED DATA_BINARY_TYPE DATA_NOT_NULL len 4;
DB_ROW_ID: DATA_SYS prtype 256 len 6;
DB_TRX_ID: DATA_SYS prtype 257 len 6;
INDEX: name PRIMARY, id 0 17, fields 2/9, uniq 2, type 3
root page 52, appr.key vals 201, leaf pages 5, size pages 6
FIELDS: par_id child_id DB_TRX_ID DB_ROLL_PTR name birth weight misc_info last_update
INDEX: name name, id 0 18, fields 1/3, uniq 3, type 0
root page 53, appr.key vals 210, leaf pages 1, size pages 1
FIELDS: name par_id child_id
FOREIGN KEY CONSTRAINT test/child_ibfk_1: test/child ( par_id )
REFERENCES test/parent ( par_id )
--------------------------------------
TABLE: name test/innodb_table_monitor, id 0 15, columns 4, indexes 1, appr.rows 0
COLUMNS: i: DATA_INT DATA_BINARY_TYPE len 4;
DB_ROW_ID: DATA_SYS prtype 256 len 6;
DB_TRX_ID: DATA_SYS prtype 257 len 6;
INDEX: name GEN_CLUST_INDEX, id 0 19, fields 0/4, uniq 1, type 1
root page 193, appr.key vals 0, leaf pages 1, size pages 1
FIELDS: DB_ROW_ID DB_TRX_ID DB_ROLL_PTR i
--------------------------------------
TABLE: name test/parent, id 0 13, columns 6, indexes 2, appr.rows 299
COLUMNS: par_id: DATA_INT DATA_BINARY_TYPE DATA_NOT_NULL len 4;
fname: DATA_CHAR prtype 524542 len 20;
lname: DATA_CHAR prtype 524542 len 20;
DB_ROW_ID: DATA_SYS prtype 256 len 6;
DB_TRX_ID: DATA_SYS prtype 257 len 6;
INDEX: name PRIMARY, id 0 15, fields 1/5, uniq 1, type 3
root page 50, appr.key vals 299, leaf pages 2, size pages 3
FIELDS: par_id DB_TRX_ID DB_ROLL_PTR fname lname
INDEX: name lname, id 0 16, fields 2/3, uniq 2, type 2
root page 51, appr.key vals 300, leaf pages 1, size pages 1
FIELDS: lname fname par_id
FOREIGN KEY CONSTRAINT test/child_ibfk_1: test/child ( par_id )
REFERENCES test/parent ( par_id )
-----------------------------------
END OF INNODB TABLE MONITOR OUTPUT
==================================
表モニターの出力にはテーブルごとに、そのテーブルに関する概要情報とそのカラム、インデックス、および外部キーに関する詳細情報を表示したセクションが含まれます。
各テーブルの概要情報には、テーブル名
(内部テーブル以外は
の形式)、ID、カラムとインデックスの数、および行数の近似値が含まれます。
db_name/tbl_name
テーブルセクションの
COLUMNS
部分には、テーブル内の各カラムが一覧表示されます。各カラムの情報はその名前とデータ型の特性を示します。DB_ROW_ID
(行 ID)、DB_TRX_ID
(トランザクション
ID)、DB_ROLL_PTR
(ロールバック/取り消しデータへのポインタ)
など、いくつかの内部カラムが
InnoDB
によって追加されます。
DATA_:
これらの記号はデータ型を示します。xxxDATA_
記号は、1
つのカラムに複数存在する可能性があります。
xxx
prtype: カラムの
「厳密な」
型。このフィールドにはカラムのデータ型、キャラクタセットコード、NULL
可能性、符号の有無、バイナリ列かどうか、といった情報が含まれます。このフィールドについては、innobase/include/data0type.h
ソースファイルを参照してください。
len:
カラムのバイト単位の長さ。
テーブルセクションの各
INDEX 部分は、1
つのテーブルインデックスの名前と特性を提供します。
name:
インデックスの名前。名前が
PRIMARY
の場合、そのインデックスは主キーです。名前が
GEN_CLUST_INDEX
の場合、そのインデックスは、テーブル定義に主キー、NULL
でない一意のインデックスのどちらも含まれていなかった場合に自動作成されたクラスタインデックスです。項9.10.1. 「クラスタインデックスと二次インデックス」
を参照してください。
id:
インデックスの ID。
fields:
インデックス内のフィールド数。
形式の値として表示されます。
m/n
m
はユーザー定義カラムの数、つまり、CREATE
TABLE
ステートメント内のインデックス定義に含まれるカラムの数です。
n
は内部的に追加されたカラムも含む、インデックスカラムの合計数です。クラスタインデックスの場合、この合計には、テーブル定義に含まれるその他のカラムと内部的に追加されたすべてのカラムが含まれます。二次インデックスの場合、この合計には、主キーに含まれるカラムのうち、二次インデックスの一部になっていないものが含まれます。
uniq:
インデックスの値を一意に決定するのに十分な先頭フィールドの数。
type:
インデックスの型。これはビットフィールドです。たとえば、1
はクラスタインデックス、2
は一意のインデックスを示すので、クラスタインデックス
(常に一意の値を含む) の
type 値は 3
になります。type
値 0
のインデックスは、クラスタインデックスでも一意のインデックスでもありません。これらのフラグ値は、innobase/include/dict0mem.h
ソースファイル内で定義されています。
root page:
インデックスのルートページ番号。
appr. key vals:
インデックスカーディナリティーの近似値。
leaf pages:
インデックス内のリーフページ数の近似値。
size pages:
インデックス内の合計ページ数の近似値。
FIELDS:
インデックスに含まれるフィールドの名前。自動生成されたクラスタインデックスの場合、このフィールドリストの先頭は、DB_ROW_ID
(行 ID)
内部フィールドになります。クラスタインデックスには必ず内部的に、DB_TRX_ID
と DB_ROLL_PTR
が主キーを構成するフィールドのあとに追加されます。二次インデックスの場合、その末尾のフィールドは、主キーに含まれるフィールドのうちで、二次インデックスの一部になっていないものになります。
テーブルセクションの末尾には、そのテーブルに適用される
FOREIGN KEY
定義が表示されます。この情報は、テーブルが参照元テーブル、参照先テーブルのいずれであっても表示されます。
