第 21 章 INFORMATION_SCHEMA テーブル

目次

21.1 INFORMATION_SCHEMA CHARACTER_SETS テーブル
21.2 INFORMATION_SCHEMA COLLATIONS テーブル
21.3 INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY テーブル
21.4 INFORMATION_SCHEMA COLUMNS テーブル
21.5 INFORMATION_SCHEMA COLUMN_PRIVILEGES テーブル
21.6 INFORMATION_SCHEMA ENGINES テーブル
21.7 INFORMATION_SCHEMA EVENTS テーブル
21.8 INFORMATION_SCHEMA GLOBAL_STATUS および SESSION_STATUS テーブル
21.9 INFORMATION_SCHEMA GLOBAL_VARIABLES および SESSION_VARIABLES テーブル
21.10 INFORMATION_SCHEMA KEY_COLUMN_USAGE テーブル
21.11 INFORMATION_SCHEMA OPTIMIZER_TRACE テーブル
21.12 INFORMATION_SCHEMA PARAMETERS テーブル
21.13 INFORMATION_SCHEMA PARTITIONS テーブル
21.14 INFORMATION_SCHEMA PLUGINS テーブル
21.15 INFORMATION_SCHEMA PROCESSLIST テーブル
21.16 INFORMATION_SCHEMA PROFILING テーブル
21.17 INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTS テーブル
21.18 INFORMATION_SCHEMA ROUTINES テーブル
21.19 INFORMATION_SCHEMA SCHEMATA テーブル
21.20 INFORMATION_SCHEMA SCHEMA_PRIVILEGES テーブル
21.21 INFORMATION_SCHEMA STATISTICS テーブル
21.22 INFORMATION_SCHEMA TABLES テーブル
21.23 INFORMATION_SCHEMA TABLESPACES テーブル
21.24 INFORMATION_SCHEMA TABLE_CONSTRAINTS テーブル
21.25 INFORMATION_SCHEMA TABLE_PRIVILEGES テーブル
21.26 INFORMATION_SCHEMA TRIGGERS テーブル
21.27 INFORMATION_SCHEMA USER_PRIVILEGES テーブル
21.28 INFORMATION_SCHEMA VIEWS テーブル
21.29 InnoDB の INFORMATION_SCHEMA テーブル
21.29.1 INFORMATION_SCHEMA INNODB_CMP および INNODB_CMP_RESET テーブル
21.29.2 INFORMATION_SCHEMA INNODB_CMP_PER_INDEX および INNODB_CMP_PER_INDEX_RESET テーブル
21.29.3 INFORMATION_SCHEMA INNODB_CMPMEM および INNODB_CMPMEM_RESET テーブル
21.29.4 INFORMATION_SCHEMA INNODB_TRX テーブル
21.29.5 INFORMATION_SCHEMA INNODB_LOCKS テーブル
21.29.6 INFORMATION_SCHEMA INNODB_LOCK_WAITS テーブル
21.29.7 INFORMATION_SCHEMA INNODB_SYS_TABLES テーブル
21.29.8 INFORMATION_SCHEMA INNODB_SYS_INDEXES テーブル
21.29.9 INFORMATION_SCHEMA INNODB_SYS_COLUMNS テーブル
21.29.10 INFORMATION_SCHEMA INNODB_SYS_FIELDS テーブル
21.29.11 INFORMATION_SCHEMA INNODB_SYS_FOREIGN テーブル
21.29.12 INFORMATION_SCHEMA INNODB_SYS_FOREIGN_COLS テーブル
21.29.13 INFORMATION_SCHEMA INNODB_SYS_TABLESTATS ビュー
21.29.14 INFORMATION_SCHEMA INNODB_SYS_DATAFILES テーブル
21.29.15 INFORMATION_SCHEMA INNODB_SYS_TABLESPACES テーブル
21.29.16 INFORMATION_SCHEMA INNODB_BUFFER_PAGE テーブル
21.29.17 INFORMATION_SCHEMA INNODB_BUFFER_PAGE_LRU テーブル
21.29.18 INFORMATION_SCHEMA INNODB_BUFFER_POOL_STATS テーブル
21.29.19 INFORMATION_SCHEMA INNODB_METRICS テーブル
21.29.20 INFORMATION_SCHEMA INNODB_FT_CONFIG テーブル
21.29.21 INFORMATION_SCHEMA INNODB_FT_DEFAULT_STOPWORD テーブル
21.29.22 INFORMATION_SCHEMA INNODB_FT_INDEX_TABLE テーブル
21.29.23 INFORMATION_SCHEMA INNODB_FT_INDEX_CACHE テーブル
21.29.24 INFORMATION_SCHEMA INNODB_FT_DELETED テーブル
21.29.25 INFORMATION_SCHEMA INNODB_FT_BEING_DELETED テーブル
21.30 MySQL Cluster の INFORMATION_SCHEMA テーブル
21.30.1 INFORMATION_SCHEMA FILES テーブル
21.30.2 INFORMATION_SCHEMA ndb_transid_mysql_connection_map テーブル
21.31 スレッドプールの INFORMATION_SCHEMA テーブル
21.31.1 INFORMATION_SCHEMA TP_THREAD_STATE テーブル
21.31.2 INFORMATION_SCHEMA TP_THREAD_GROUP_STATE テーブル
21.31.3 INFORMATION_SCHEMA TP_THREAD_GROUP_STATS テーブル
21.32 SHOW ステートメントの拡張

INFORMATION_SCHEMA では、データベースメタデータへのアクセスを実現し、データベースまたはテーブルの名前、カラムのデータ型、アクセス権限などの MySQL Server に関する情報を提供します。この情報に使用されることがある別の用語が、データディクショナリシステムカタログです。

INFORMATION_SCHEMA データベースの使用上の注意

INFORMATION_SCHEMA は、各 MySQL インスタンス内のデータベースであり、MySQL Server が保持するほかのすべてのデータベースに関する情報を格納する場所です。INFORMATION_SCHEMA データベースには複数の読み取り専用テーブルが含まれます。これらには実際にはビューがあるので、関連付けられたファイルはなく、トリガーは設定できません。また、その名前を持つデータベースディレクトリもありません。

USE ステートメントを使用してデフォルトデータベースとして INFORMATION_SCHEMA を選択できますが、実行できる操作はテーブル内容の読み取りだけで、テーブルに対する INSERTUPDATEDELETE 操作は実行できません。

次に INFORMATION_SCHEMA から情報を取り出すステートメントの例を示します。

mysql> SELECT table_name, table_type, engine -> FROM information_schema.tables -> WHERE table_schema = 'db5' -> ORDER BY table_name;+------------+------------+--------+
| table_name | table_type | engine |
+------------+------------+--------+
| fk | BASE TABLE | InnoDB |
| fk2 | BASE TABLE | InnoDB |
| goto | BASE TABLE | MyISAM |
| into | BASE TABLE | MyISAM |
| k | BASE TABLE | MyISAM |
| kurs | BASE TABLE | MyISAM |
| loop | BASE TABLE | MyISAM |
| pk | BASE TABLE | InnoDB |
| t | BASE TABLE | MyISAM |
| t2 | BASE TABLE | MyISAM |
| t3 | BASE TABLE | MyISAM |
| t7 | BASE TABLE | MyISAM |
| tables | BASE TABLE | MyISAM |
| v | VIEW | NULL |
| v2 | VIEW | NULL |
| v3 | VIEW | NULL |
| v56 | VIEW | NULL |
+------------+------------+--------+
17 rows in set (0.01 sec)

説明: このステートメントは、データベース db5 内のすべてのテーブルのリストを要求し、テーブルの名前、種類、ストレージエンジンという 3 つの情報だけを示します。

文字セットの考慮事項

文字カラム (TABLES.TABLE_NAME など) の定義は、通常、VARCHAR(N) CHARACTER SET utf8 であり、ここで N は少なくとも 64 です。MySQL は、このようなカラムでのすべての検索、ソート、比較、およびほかの文字列操作に、この文字セット (utf8_general_ci) のデフォルトの照合順序を使用します。

一部の MySQL オブジェクトはファイルとして表されるので、INFORMATION_SCHEMA 文字列カラムでの検索は、ファイルシステムでの大文字と小文字の区別によって影響を受けることがあります。詳細は、セクション10.1.7.9「照合順序と INFORMATION_SCHEMA 検索」を参照してください。

SHOW ステートメントの代替方法としての INFORMATION_SCHEMA

SELECT ... FROM INFORMATION_SCHEMA ステートメントは、MySQL がサポートするさまざまな SHOW ステートメント (SHOW DATABASESSHOW TABLES など) により提供された情報にアクセスするための一貫性の高い方法として用意されています。SELECT は、SHOW に比べて次の利点があります。

SHOW はよく知られ、広く使用されているので、SHOW ステートメントは引き続き代替方法として有効です。実際、セクション21.32「SHOW ステートメントの拡張」で説明しているように、INFORMATION_SCHEMA の実装に伴い、SHOW に拡張が行われています。

権限

各 MySQL ユーザーには、これらのテーブルへのアクセス権がありますが、ユーザーが適切なアクセス権限を持つオブジェクトに対応したテーブル内の行だけを表示できます。一部の場合 (たとえば INFORMATION_SCHEMA.ROUTINES テーブル内の ROUTINE_DEFINITION カラム) では、権限が不足しているユーザーには NULL と表示されます。これらの制限は InnoDB テーブルには適用されません。PROCESS 権限だけがあればこれらを表示できます。

同じ権限が、INFORMATION_SCHEMA からの情報の選択と、SHOW ステートメントを通じた同じ情報の表示に適用されます。どちらの場合でも、オブジェクトに関する情報を表示するには、そのオブジェクトに対する何らかの権限が必要です。

パフォーマンスに関する考慮事項

複数のデータベースの情報を検索する INFORMATION_SCHEMA クエリーは、長時間かかり、パフォーマンスに影響を及ぼす可能性があります。クエリーの効率を確認するには、EXPLAIN を使用できます。EXPLAIN 出力を使用した INFORMATION_SCHEMA クエリーの調整に関する詳細は、セクション8.2.4「INFORMATION_SCHEMA クエリーの最適化」を参照してください。

標準に関する考慮事項

MySQL での INFORMATION_SCHEMA テーブル構造の実装は ANSI/ISO SQL:2003 標準パート 11 の Schemata に準拠しています。SQL:2003 の中核機能の F021 基本情報スキーマにほぼ準拠することを意図しています。

SQL Server 2000 (これも標準に準拠しています) のユーザーであれば、非常に類似していることがわかるでしょう。ただし、MySQL では実装に関連しない多くのカラムを省略し、MySQL 固有のカラムを追加しています。このようなカラムの 1 つが、INFORMATION_SCHEMA.TABLES テーブル内の ENGINE カラムです。

ほかの DBMS では syscatsystem などのさまざまな名前を使用していますが、標準の名前は INFORMATION_SCHEMA です。

標準または DB2、SQL Server、Oracle で予約されている名前を使用しないように、MySQL 拡張のマークを付けて一部のカラムの名前を変更しています。(たとえば、TABLES テーブルでの COLLATIONTABLE_COLLATION に変更しました。)https://web.archive.org/web/20070428032454/http://www.dbazine.com/db2/db2-disarticles/gulutzan5 の記事の末尾近くにある予約語のリストを参照してください。

INFORMATION_SCHEMA 参照セクションでの規則

次のセクションでは、INFORMATION_SCHEMA でのテーブルおよびカラムのそれぞれについて説明します。カラムごとに次の 3 つの情報があります。

多くのセクションは、どの SHOW ステートメントが、INFORMATION_SCHEMA から情報を取得する SELECT と同等であるかを示します。デフォルトデータベースの情報を表示する SHOW ステートメントでは、FROM db_name 句を省略した場合、INFORMATION_SCHEMA テーブルから情報を取得するクエリーの WHERE 句に AND TABLE_SCHEMA = SCHEMA() 条件を追加すると、デフォルトデータベースの情報を選択できます。

InnoDB ストレージエンジンに固有の INFORMATION_SCHEMA テーブルの詳細は、セクション21.29「InnoDB の INFORMATION_SCHEMA テーブル」を参照してください。スレッドプールプラグインに固有の INFORMATION_SCHEMA テーブルの詳細は、セクション21.31「スレッドプールの INFORMATION_SCHEMA テーブル」を参照してください。

INFORMATION_SCHEMA データベースに関するよくある質問とその回答については、セクションA.7「MySQL 5.6 FAQ: INFORMATION_SCHEMA」を参照してください。

21.1 INFORMATION_SCHEMA CHARACTER_SETS テーブル

CHARACTER_SETS テーブルは、利用できる文字セットに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
CHARACTER_SET_NAMECharset 
DEFAULT_COLLATE_NAMEDefault collation 
DESCRIPTIONDescriptionMySQL 拡張
MAXLENMaxlenMySQL 拡張

次のステートメントは同等です。

SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS [WHERE CHARACTER_SET_NAME LIKE 'wild']
SHOW CHARACTER SET [LIKE 'wild']

21.2 INFORMATION_SCHEMA COLLATIONS テーブル

COLLATIONS テーブルは、各文字セットの照合順序に関する情報を提供します。

INFORMATION_SCHEMASHOW備考
COLLATION_NAMECollation 
CHARACTER_SET_NAMECharsetMySQL 拡張
IDIdMySQL 拡張
IS_DEFAULTDefaultMySQL 拡張
IS_COMPILEDCompiledMySQL 拡張
SORTLENSortlenMySQL 拡張
  • COLLATION_NAME は照合順序名です。

  • CHARACTER_SET_NAME は、照合順序が関連付けられている文字セットの名前です。

  • ID は照合順序 ID です。

  • IS_DEFAULT は、照合順序がその文字セットのデフォルトであるかどうかを示します。

  • IS_COMPILED は、文字セットがサーバー内にコンパイルされるかどうかを示します。

  • SORTLEN は、文字セットで表された文字列をソートするために必要なメモリー容量に関係しています。

照合順序情報は、SHOW COLLATION ステートメントから取得することもできます。次のステートメントは同等です。

SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS [WHERE COLLATION_NAME LIKE 'wild']
SHOW COLLATION [LIKE 'wild']

21.3 INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY テーブル

COLLATION_CHARACTER_SET_APPLICABILITY テーブルは、どの文字セットがどの照合順序に適用されるかを示します。カラムは SHOW COLLATION から取得する最初の 2 つの表示フィールドと同等です。

INFORMATION_SCHEMASHOW備考
COLLATION_NAMECollation 
CHARACTER_SET_NAMECharset 

21.4 INFORMATION_SCHEMA COLUMNS テーブル

COLUMNS テーブルは、テーブル内のカラムに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
TABLE_CATALOG def
TABLE_SCHEMA  
TABLE_NAME  
COLUMN_NAMEField 
ORDINAL_POSITION 注を参照
COLUMN_DEFAULTDefault 
IS_NULLABLENull 
DATA_TYPEType 
CHARACTER_MAXIMUM_LENGTHType 
CHARACTER_OCTET_LENGTH  
NUMERIC_PRECISIONType 
NUMERIC_SCALEType 
DATETIME_PRECISIONType 
CHARACTER_SET_NAME  
COLLATION_NAMECollation 
COLUMN_TYPETypeMySQL 拡張
COLUMN_KEYKeyMySQL 拡張
EXTRAExtraMySQL 拡張
PRIVILEGESPrivilegesMySQL 拡張
COLUMN_COMMENTCommentMySQL 拡張

:

  • SHOW では、Type 表示には、異なる複数の COLUMNS カラムの値が含まれます。

  • ORDINAL_POSITIONORDER BY ORDINAL_POSITION と記す場合があるため必要です。SHOW とは異なり、SELECT には自動順序付けはありません。

  • CHARACTER_OCTET_LENGTH は、マルチバイト文字セットを除き、CHARACTER_MAXIMUM_LENGTH と同じである必要があります。

  • CHARACTER_SET_NAMECollation から派生できます。たとえば、SHOW FULL COLUMNS FROM t と指定し、Collation カラムに latin1_swedish_ci の値が表示されている場合は、文字セットは最初の下線の前にあるもの、つまり latin1 になります。

  • MySQL 5.6.4 で DATETIME_PRECISION が追加されました。

次のステートメントはほぼ同等です。

SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_name' [AND table_schema = 'db_name'] [AND column_name LIKE 'wild']
SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE 'wild']

21.5 INFORMATION_SCHEMA COLUMN_PRIVILEGES テーブル

COLUMN_PRIVILEGES テーブルは、カラムの権限に関する情報を提供します。この情報は mysql.columns_priv 付与テーブルからのものです。

INFORMATION_SCHEMASHOW備考
GRANTEE 'user_name'@'host_name'
TABLE_CATALOG def
TABLE_SCHEMA  
TABLE_NAME  
COLUMN_NAME  
PRIVILEGE_TYPE  
IS_GRANTABLE  

:

  • SHOW FULL COLUMNS の出力では、権限はすべて 1 つのフィールドにあり、select,insert,update,references のように小文字で記されます。COLUMN_PRIVILEGES では、行ごとに 1 つの権限があり、大文字で記されます。

  • PRIVILEGE_TYPE は、SELECTINSERTUPDATEREFERENCES の値のいずれか (1 つのみ) を含むことができます。

  • ユーザーに GRANT OPTION 権限がある場合、IS_GRANTABLEYES になります。それ以外の場合は、IS_GRANTABLENO になります。出力には、GRANT OPTION が個別の権限としてリストされません。

次のステートメントは同等ではありません

SELECT ... FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES
SHOW GRANTS ...

21.6 INFORMATION_SCHEMA ENGINES テーブル

ENGINES テーブルは、ストレージエンジンに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
ENGINEEngineMySQL 拡張
SUPPORTSupportMySQL 拡張
COMMENTCommentMySQL 拡張
TRANSACTIONSTransactionsMySQL 拡張
XAXAMySQL 拡張
SAVEPOINTSSavepointsMySQL 拡張

:

  • ENGINES テーブルは、非標準テーブルです。この内容は、SHOW ENGINES ステートメントのカラムに対応します。そのカラムの説明については、セクション13.7.5.17「SHOW ENGINES 構文」を参照してください。

セクション13.7.5.17「SHOW ENGINES 構文」も参照してください。

21.7 INFORMATION_SCHEMA EVENTS テーブル

EVENTS テーブルは、セクション20.4「イベントスケジューラの使用」で説明しているスケジュール設定済みのイベントに関する情報を提供します。SHOW Name 値は、SHOW EVENTS ステートメントのカラム名に対応します。

INFORMATION_SCHEMASHOW備考
EVENT_CATALOG def、MySQL 拡張
EVENT_SCHEMADbMySQL 拡張
EVENT_NAMENameMySQL 拡張
DEFINERDefinerMySQL 拡張
TIME_ZONETime zoneMySQL 拡張
EVENT_BODY MySQL 拡張
EVENT_DEFINITION MySQL 拡張
EVENT_TYPETypeMySQL 拡張
EXECUTE_ATExecute atMySQL 拡張
INTERVAL_VALUEInterval valueMySQL 拡張
INTERVAL_FIELDInterval fieldMySQL 拡張
SQL_MODE MySQL 拡張
STARTSStartsMySQL 拡張
ENDSEndsMySQL 拡張
STATUSStatusMySQL 拡張
ON_COMPLETION MySQL 拡張
CREATED MySQL 拡張
LAST_ALTERED MySQL 拡張
LAST_EXECUTED MySQL 拡張
EVENT_COMMENT MySQL 拡張
ORIGINATOROriginatorMySQL 拡張
CHARACTER_SET_CLIENTcharacter_set_clientMySQL 拡張
COLLATION_CONNECTIONcollation_connectionMySQL 拡張
DATABASE_COLLATIONDatabase CollationMySQL 拡張

:

  • EVENTS テーブルは、非標準テーブルです。

  • EVENT_CATALOG: このカラムの値は常に def です。

  • EVENT_SCHEMA: このイベントが属しているスキーマ (データベース) の名前です。

  • EVENT_NAME: イベントの名前です。

  • DEFINER: 'user_name'@'host_name' 形式で示した、イベントを作成したユーザーのアカウントです。

  • TIME_ZONE: イベントタイムゾーンです。これはイベントをスケジュール設定するために使用され、実行するときにイベント内で有効なタイムゾーンです。デフォルト値は SYSTEM です。

  • EVENT_BODY: イベントの DO 句に使用される言語です。MySQL 5.6 ではこれは常に SQL です。

    このカラムは、以前の MySQL バージョンに存在していたものと同じ名前 (現在は EVENT_DEFINITION という名前) のカラムと混同しないでください。

  • EVENT_DEFINITION: イベントの DO 句を構成する SQL ステートメントのテキストです。つまり、このイベントで実行されたステートメントです。

  • EVENT_TYPE: イベントの繰り返しタイプであり、ONE TIME (一時的) または RECURRING (繰り返し) のどちらかになります。

  • EXECUTE_AT: 一度だけのイベントの場合、これはイベントの作成に使用された CREATE EVENT ステートメント、またはイベントを変更した最後の ALTER EVENT ステートメントの AT 句で指定された DATETIME 値です。このカラムに表示された値は、イベントの AT 句に含まれた、INTERVAL 値の加算または減算に影響します。たとえば、イベントが ON SCHEDULE AT CURRENT_TIMESTAMP + '1:6' DAY_HOUR を使用して作成され、イベントが 2006-02-09 の 14:05:30 に作成された場合、カラムに表示される値は '2006-02-10 20:05:30' になります。

    イベントのタイミングが AT 句ではなく EVERY 句で決定される場合 (つまり、イベントが繰り返しである場合)、このカラムの値は NULL になります。

  • INTERVAL_VALUE: 繰り返しイベントの場合、このカラムにはイベント EVERY 句の数値部分が含まれます。

    一度だけのイベント (AT 句によってタイミングが決定されるイベント) の場合、このカラムは NULL になります。

  • INTERVAL_FIELD: 繰り返しイベントの場合、このカラムは、イベントのタイミングを制御する EVERY 句の単位部分が含まれます。したがって、このカラムには、「YEAR」「QUARTER」「DAY」などの値が含まれます。

    一度だけのイベント (AT 句によってタイミングが決定されるイベント) の場合、このカラムは NULL になります。

  • SQL_MODE: イベントが作成または変更されたときに有効であり、イベントが実行したときの SQL モードです。指定可能な値については、セクション5.1.7「サーバー SQL モード」を参照してください。

  • STARTS: 定義に STARTS 句を含む繰り返しイベントでは、このカラムには対応する DATETIME 値が含まれます。EXECUTE_AT カラムの場合と同様に、この値は使用されている式を解きます。

    イベントのタイミングに影響する STARTS 句がない場合、このカラムは NULL です

  • ENDS: 定義に ENDS 句を含む繰り返しイベントでは、このカラムには対応する DATETIME 値が含まれます。EXECUTE_AT カラムの場合と同様に、この値は使用されている式を解きます。

    イベントのタイミングに影響する ENDS 句がない場合、このカラムは NULL です。

  • STATUS: ENABLEDDISABLEDSLAVESIDE_DISABLED の 3 つの値のいずれかになります。

    SLAVESIDE_DISABLED は、イベントの作成が、レプリケーションマスターとして機能している別の MySQL サーバーで行われ、スレーブとして機能している現在の MySQL サーバーに複製されたが、イベントは現時点でスレーブ上で実行されていないことを示します。詳細は、セクション17.4.1.11「呼び出される機能のレプリケーション」を参照してください。

  • ON_COMPLETION: PRESERVE または NOT PRESERVE の 2 つの値のどちらかになります。

  • CREATED: イベントが作成された日時です。これは TIMESTAMP 値です。

  • LAST_ALTERED: イベントが最後に変更された日時です。これは TIMESTAMP 値です。イベントが作成されてから変更されなかった場合、このカラムには CREATED カラムと同じ値が保持されます。

  • LAST_EXECUTED: イベントが最後に実行された日時です。DATETIME 値。イベントが一度も実行されていない場合、このカラムは NULL です。

    LAST_EXECUTED はイベントが開始した時点を示します。このため、ENDS カラムが LAST_EXECUTED より小さくなることは決してありません。

  • EVENT_COMMENT: イベントにコメントがある場合のコメントのテキストです。ない場合は、このカラムの値は空の文字列になります。

  • ORIGINATOR: このイベントが作成された MySQL サーバーのサーバー ID で、レプリケーションで使用されます。デフォルト値は 0 です。

  • CHARACTER_SET_CLIENT: イベントが作成されたときの character_set_client システム変数のセッション値です。

  • COLLATION_CONNECTION: イベントが作成されたときの collation_connection システム変数のセッション値です。

  • DATABASE_COLLATION: イベントが関連付けられているデータベースの照合順序です。

: 次に示すように、ユーザー jon@ghidorae_daily という名前のイベントを作成し、ALTER EVENT ステートメントを使用して数分後に変更するとします。

DELIMITER |
CREATE EVENT e_daily ON SCHEDULE EVERY 1 DAY COMMENT 'Saves total number of sessions then clears the table each day' DO BEGIN INSERT INTO site_activity.totals (time, total) SELECT CURRENT_TIMESTAMP, COUNT(*) FROM site_activity.sessions; DELETE FROM site_activity.sessions; END |
DELIMITER ;
ALTER EVENT e_daily ENABLED;

(コメントは複数の行にわたって記述できます。)

このユーザーは続いて次の SELECT ステートメントを実行し、次の出力が表示されます。

mysql> SELECT * FROM INFORMATION_SCHEMA.EVENTS > WHERE EVENT_NAME = 'e_daily' > AND EVENT_SCHEMA = 'myschema'\G*************************** 1. row *************************** EVENT_CATALOG: def EVENT_SCHEMA: test EVENT_NAME: e_daily DEFINER: me@localhost TIME_ZONE: SYSTEM EVENT_BODY: SQL EVENT_DEFINITION: BEGIN INSERT INTO site_activity.totals (time, total) SELECT CURRENT_TIMESTAMP, COUNT(*) FROM site_activity.sessions; DELETE FROM site_activity.sessions; END EVENT_TYPE: RECURRING EXECUTE_AT: NULL INTERVAL_VALUE: 1 INTERVAL_FIELD: DAY SQL_MODE: STARTS: 2008-09-03 12:13:39 ENDS: NULL STATUS: ENABLED ON_COMPLETION: NOT PRESERVE CREATED: 2008-09-03 12:13:39 LAST_ALTERED: 2008-09-03 12:13:39 LAST_EXECUTED: NULL EVENT_COMMENT: Saves total number of sessions then clears the table each day ORIGINATOR: 1
CHARACTER_SET_CLIENT: latin1
COLLATION_CONNECTION: latin1_swedish_ci DATABASE_COLLATION: latin1_swedish_ci

セクション20.4.4「イベントメタデータ」で説明しているように、EVENTS テーブル内の時間は、イベントタイムゾーンまたは現在のセッションタイムゾーンを使用して表示されます。

セクション13.7.5.19「SHOW EVENTS 構文」も参照してください。

21.8 INFORMATION_SCHEMA GLOBAL_STATUS および SESSION_STATUS テーブル

GLOBAL_STATUS および SESSION_STATUS テーブルは、サーバーのステータス変数に関する情報を提供します。それらの内容は、SHOW GLOBAL STATUS および SHOW SESSION STATUS ステートメントが生成する情報に対応します (セクション13.7.5.36「SHOW STATUS 構文」を参照してください)。

INFORMATION_SCHEMASHOW備考
VARIABLE_NAMEVariable_name 
VARIABLE_VALUE 

:

  • これらのテーブルそれぞれの VARIABLE_VALUE カラムは VARCHAR(1024) として定義されます。

21.9 INFORMATION_SCHEMA GLOBAL_VARIABLES および SESSION_VARIABLES テーブル

GLOBAL_VARIABLES および SESSION_VARIABLES テーブルは、サーバーのステータス変数に関する情報を提供します。これらの内容は、SHOW GLOBAL VARIABLES および SHOW SESSION VARIABLES ステートメントが生成した情報に対応します (セクション13.7.5.40「SHOW VARIABLES 構文」を参照してください)。

INFORMATION_SCHEMASHOW備考
VARIABLE_NAMEVariable_name 
VARIABLE_VALUE 

:

  • これらのテーブルそれぞれの VARIABLE_VALUE カラムは VARCHAR(1024) として定義されます。完全には表示されない非常に長い値を持つ変数の場合、回避策として SELECT を使用します。例:

    SELECT @@GLOBAL.innodb_data_file_path;

21.10 INFORMATION_SCHEMA KEY_COLUMN_USAGE テーブル

KEY_COLUMN_USAGE テーブルは、どのキーカラムに制約があるかを説明します。

INFORMATION_SCHEMASHOW備考
CONSTRAINT_CATALOG def
CONSTRAINT_SCHEMA  
CONSTRAINT_NAME  
TABLE_CATALOG def
TABLE_SCHEMA  
TABLE_NAME  
COLUMN_NAME  
ORDINAL_POSITION  
POSITION_IN_UNIQUE_CONSTRAINT  
REFERENCED_TABLE_SCHEMA  
REFERENCED_TABLE_NAME  
REFERENCED_COLUMN_NAME  

:

  • 制約が外部キーの場合、これは外部キーのカラムで、外部キーが参照するカラムではありません。

  • ORDINAL_POSITION の値は制約内のカラムの位置であり、テーブル内のカラムの位置ではありません。カラムの位置には 1 から始まる番号が付けられています。

  • POSITION_IN_UNIQUE_CONSTRAINT の値は、一意の主キーの制約に対し NULL です。外部キーの制約の場合、これは、参照されているテーブルのキーの順序位置になります。

    次の定義を持つ t1 および t3 という 2 つのテーブルがあるとします。

    CREATE TABLE t1
    ( s1 INT, s2 INT, s3 INT, PRIMARY KEY(s3)
    ) ENGINE=InnoDB;
    CREATE TABLE t3
    ( s1 INT, s2 INT, s3 INT, KEY(s1), CONSTRAINT CO FOREIGN KEY (s2) REFERENCES t1(s3)
    ) ENGINE=InnoDB;

    これらの 2 つのテーブルに対し、KEY_COLUMN_USAGE テーブルには次の 2 つの行があります。

    • CONSTRAINT_NAME = 'PRIMARY'TABLE_NAME = 't1'COLUMN_NAME = 's3'ORDINAL_POSITION = 1POSITION_IN_UNIQUE_CONSTRAINT = NULL を含む 1 つの行。

    • CONSTRAINT_NAME = 'CO'TABLE_NAME = 't3'COLUMN_NAME = 's2'ORDINAL_POSITION = 1POSITION_IN_UNIQUE_CONSTRAINT = 1 を含む 1 つの行。

21.11 INFORMATION_SCHEMA OPTIMIZER_TRACE テーブル

OPTIMIZER_TRACE テーブルは、オプティマイザトレース機能で生成される情報を提供します。追跡を有効にするには、optimizer_trace システム変数を使用します。詳細については、「MySQL Internals: Tracing the Optimizer」を参照してください。

MySQL 5.6.3 では OPTIMIZER_TRACE テーブルが追加されました。

21.12 INFORMATION_SCHEMA PARAMETERS テーブル

PARAMETERS テーブルは、ストアドプロシージャーとストアドファンクションのパラメータと、ストアドファンクションの戻り値に関する情報を提供します。パラメータ情報は、mysql.proc テーブルの param_list カラムの内容と類似しています。

INFORMATION_SCHEMAmysql.proc備考
SPECIFIC_CATALOG def
SPECIFIC_SCHEMAdbルーチンデータベース
SPECIFIC_NAMEnameルーチン名
ORDINAL_POSITION 1、2、3、... はパラメータ用、0 は関数 RETURNS 句用
PARAMETER_MODE INOUTINOUT (RETURNS には NULL)
PARAMETER_NAME パラメータ名 (RETURNS には NULL)
DATA_TYPE COLUMNS テーブルの場合と同じ
CHARACTER_MAXIMUM_LENGTH COLUMNS テーブルの場合と同じ
CHARACTER_OCTET_LENGTH COLUMNS テーブルの場合と同じ
NUMERIC_PRECISION COLUMNS テーブルの場合と同じ
NUMERIC_SCALE COLUMNS テーブルの場合と同じ
DATETIME_PRECISION COLUMNS テーブルの場合と同じ
CHARACTER_SET_NAME COLUMNS テーブルの場合と同じ
COLLATION_NAME COLUMNS テーブルの場合と同じ
DTD_IDENTIFIER COLUMNS テーブルの場合と同じ
ROUTINE_TYPEtypeROUTINES テーブルの場合と同じ

:

  • ストアドプロシージャーとストアドファンクションの連続したパラメータについては、ORDINAL_POSITION 値は 1、2、3 などです。ストアドファンクションについては、RETURNS 句のデータ型について説明している行もあります。戻り値は真のパラメータではないので、これについて説明している行には次の一意の特性があります。

    • ORDINAL_POSITION 値は 0 です。

    • 戻り値には名前がなく、モードが適用されないので、PARAMETER_NAME 値と PARAMETER_MODE 値は NULL です。

    • MySQL 5.6.4 で DATETIME_PRECISION が追加されました。

21.13 INFORMATION_SCHEMA PARTITIONS テーブル

PARTITIONS テーブルは、テーブルパーティションに関する情報を提供します。テーブルのパーティション化に関する詳細は、第19章「パーティション化を参照してください。

INFORMATION_SCHEMASHOW備考
TABLE_CATALOG MySQL 拡張
TABLE_SCHEMA MySQL 拡張
TABLE_NAME MySQL 拡張
PARTITION_NAME MySQL 拡張
SUBPARTITION_NAME MySQL 拡張
PARTITION_ORDINAL_POSITION MySQL 拡張
SUBPARTITION_ORDINAL_POSITION MySQL 拡張
PARTITION_METHOD MySQL 拡張
SUBPARTITION_METHOD MySQL 拡張
PARTITION_EXPRESSION MySQL 拡張
SUBPARTITION_EXPRESSION MySQL 拡張
PARTITION_DESCRIPTION MySQL 拡張
TABLE_ROWS MySQL 拡張
AVG_ROW_LENGTH MySQL 拡張
DATA_LENGTH MySQL 拡張
MAX_DATA_LENGTH MySQL 拡張
INDEX_LENGTH MySQL 拡張
DATA_FREE MySQL 拡張
CREATE_TIME MySQL 拡張
UPDATE_TIME MySQL 拡張
CHECK_TIME MySQL 拡張
CHECKSUM MySQL 拡張
PARTITION_COMMENT MySQL 拡張
NODEGROUP MySQL 拡張
TABLESPACE_NAME MySQL 拡張

:

  • PARTITIONS テーブルは、非標準テーブルです。

    このテーブルの各レコードは、パーティション化されたテーブルの個々のパーティションまたはサブパーティションに対応しています。

  • TABLE_CATALOG: このカラムは常に def です。

  • TABLE_SCHEMA: このカラムはテーブルが属しているデータベースの名前を含みます。

  • TABLE_NAME: このカラムはパーティションを含むテーブルの名前を含みます。

  • PARTITION_NAME: パーティションの名前です。

  • SUBPARTITION_NAME: PARTITIONS テーブルレコードがサブパーティションを表す場合、このカラムはサブパーティションの名前を含みます。そうでない場合は、NULL になります。

  • PARTITION_ORDINAL_POSITION: すべてのパーティションは、定義されたときと同じ順序でインデックスが付けられます。最初のパーティションに 1 の番号が割り当てられます。インデックス設定は、パーティションが追加、削除、再編成されると変わることがあります。このカラムに表示された番号は、インデックス設定の変更を考慮した現在の順序を表します。

  • SUBPARTITION_ORDINAL_POSITION: テーブル内でパーティションにインデックスを付ける場合と同様に、指定されたパーティション内のサブパーティションにもインデックスの設定および変更が行われます。

  • PARTITION_METHOD: RANGELISTHASHLINEAR HASHKEY、または LINEAR KEY のいずれかの値です。つまり、セクション19.2「パーティショニングタイプ」で説明しているように、利用可能ないずれかのパーティショニングタイプになります。

  • SUBPARTITION_METHOD: HASHLINEAR HASHKEY、または LINEAR KEY のいずれかの値です。つまり、セクション19.2.6「サブパーティショニング」で説明しているように、利用可能ないずれかのサブパーティショニングタイプになります。

  • PARTITION_EXPRESSION: これは、テーブルの現在のパーティション化スキームを作成した CREATE TABLE または ALTER TABLE ステートメントで使用されたパーティション化関数の式です。

    たとえば、次のステートメントを使用して test データベースに作成されたパーティション化されたテーブルを考えてみます。

    CREATE TABLE tp ( c1 INT, c2 INT, c3 VARCHAR(25)
    )
    PARTITION BY HASH(c1 + c2)
    PARTITIONS 4;

    このテーブルからのパーティションに対する PARTITIONS テーブルレコード内の PARTITION_EXPRESSION カラムには、次に示すように c1 + c2 と表示されます。

    mysql> SELECT DISTINCT PARTITION_EXPRESSION > FROM INFORMATION_SCHEMA.PARTITIONS > WHERE TABLE_NAME='tp' AND TABLE_SCHEMA='test';+----------------------+
    | PARTITION_EXPRESSION |
    +----------------------+
    | c1 + c2 |
    +----------------------+
    1 row in set (0.09 sec)
  • SUBPARTITION_EXPRESSION: これは、テーブルのパーティション化を定義するために使用されるパーティショニング式に対する PARTITION_EXPRESSION の動作と同様に、サブパーティション化を定義するサブパーティショニング式に対して動作します。

    テーブルにサブパーティションがない場合、このカラムは NULL になります。

  • PARTITION_DESCRIPTION: このカラムは RANGE および LIST パーティションに使用されます。RANGE パーティションの場合、パーティションの VALUES LESS THAN 句で設定された値が含まれます。これには整数か MAXVALUE のどちらかを指定できます。LIST パーティションの場合、このカラムには、パーティションの VALUES IN 句で定義された値が含まれます。これは整数値のカンマ区切りのリストになります。

    PARTITION_METHODRANGE または LIST 以外であるパーティションの場合、このカラムは常に NULL になります。

  • TABLE_ROWS: パーティションのテーブル行の数です。

    パーティション化された InnoDB テーブルの場合、TABLE_ROWS カラムで指定された行数は、SQL 最適化で使用される推定値に過ぎず、必ずしも正確であるとはかぎりません。

  • AVG_ROW_LENGTH: このパーティションまたはサブパーティションに格納された行の、バイトで表した平均長です。

    これは TABLE_ROWS で分割された DATA_LENGTH と同じです。

  • DATA_LENGTH: パーティションまたはサブパーティションに格納されたすべての行の、バイトで表された合計長です。つまり、パーティションまたはサブパーティションに格納されたバイトの合計数です。

  • MAX_DATA_LENGTH: このパーティションまたはサブパーティションに格納できる最大のバイト数です。

  • INDEX_LENGTH: このパーティションおよびサブパーティションのインデックスファイルの、バイトで表された長さです。

  • DATA_FREE: パーティションまたはサブパーティションに割り当てられているが使用されていないバイト数です。

  • CREATE_TIME: パーティションまたはサブパーティションが作成された時間です。

  • UPDATE_TIME: パーティションまたはサブパーティションが最後に変更された時間です。

  • CHECK_TIME: パーティションまたはサブパーティションが属しているテーブルが最後に確認された時間です。

    注記

    一部のストレージエンジンは、この時間を更新しません。これらのストレージエンジンを使用したテーブルの場合、この値は常に NULL です。

  • CHECKSUM: チェックサム値になります (ある場合)。ない場合は、このカラムは NULL になります。

  • PARTITION_COMMENT: このカラムには、パーティションに対して行われたコメントのテキストが含まれます。

    MySQL 5.6.6 より前では、このカラムの表示幅は 80 文字でしたが、この長さを超えたパーティションコメントはこの文字数まで切り捨てられていました。MySQL 5.6.6 以降では、パーティションコメントの最大長は 1024 文字に定義され、PARTITION_COMMENT カラムの表示幅はこの上限に一致するように 1024 文字に増やされています (Bug #11748924、Bug #37728)。

    このカラムのデフォルト値は空の文字列です。

  • NODEGROUP: これは、パーティションが属しているノードグループです。これは、MySQL クラスタテーブルにのみ関連します。そうでない場合は、このカラムの値は常に 0 です。

  • TABLESPACE_NAME: このカラムには、パーティションが属しているテーブルスペースの名前が含まれます。現在、このカラムの値は常に DEFAULT です。

  • パーティション化されていないテーブルには、INFORMATION_SCHEMA.PARTITIONS に 1 つのレコードがあります。ただし、PARTITION_NAMESUBPARTITION_NAMEPARTITION_ORDINAL_POSITIONSUBPARTITION_ORDINAL_POSITIONPARTITION_METHODSUBPARTITION_METHODPARTITION_EXPRESSIONSUBPARTITION_EXPRESSION、および PARTITION_DESCRIPTION カラムの値はすべて NULL になります。(この場合の PARTITION_COMMENT カラムはブランクです。)

21.14 INFORMATION_SCHEMA PLUGINS テーブル

PLUGINS テーブルは、サーバーのプラグインに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
PLUGIN_NAMENameMySQL 拡張
PLUGIN_VERSION MySQL 拡張
PLUGIN_STATUSStatusMySQL 拡張
PLUGIN_TYPETypeMySQL 拡張
PLUGIN_TYPE_VERSION MySQL 拡張
PLUGIN_LIBRARYLibraryMySQL 拡張
PLUGIN_LIBRARY_VERSION MySQL 拡張
PLUGIN_AUTHOR MySQL 拡張
PLUGIN_DESCRIPTION MySQL 拡張
PLUGIN_LICENSELicenseMySQL 拡張
LOAD_OPTION MySQL 拡張

:

  • PLUGINS テーブルは、非標準テーブルです。

  • PLUGIN_NAME は、INSTALL PLUGINUNINSTALL PLUGIN などのステートメントでプラグインを参照するために使用される名前です。

  • PLUGIN_VERSION は、プラグインの一般的なタイプのディスクリプタのバージョンです。

  • PLUGIN_STATUS は、ACTIVEINACTIVEDISABLED、または DELETED のいずれかのプラグインステータスを示します。

  • PLUGIN_TYPE は、STORAGE ENGINEINFORMATION_SCHEMAAUTHENTICATION などのプラグインのタイプを示します。

  • PLUGIN_TYPE_VERSION は、プラグインのタイプ固有のディスクリプタのバージョンです。

  • PLUGIN_LIBRARY は、プラグイン共有オブジェクトファイルの名前です。これは、INSTALL PLUGINUNINSTALL PLUGIN などのステートメントでプラグインファイルを参照するために使用される名前です。このファイルは、plugin_dir システム変数によって指名されたディレクトリに置かれます。ライブラリ名が NULL である場合、プラグインはコンパイルされますが、UNINSTALL PLUGIN でアンインストールできません。

  • PLUGIN_LIBRARY_VERSION は、プラグイン API インタフェースバージョンを示します。

  • PLUGIN_AUTHOR はプラグイン作成者の名前を示します。

  • PLUGIN_DESCRIPTION は、プラグインの簡単な説明を提供します。

  • PLUGIN_LICENSE は、GPL などのライセンスがどのようにプラグインに付与されているかを示します。

  • LOAD_OPTION は、プラグインがどのようにロードされたかを示します。値は、OFFONFORCE、または FORCE_PLUS_PERMANENT です。セクション5.1.8.1「プラグインのインストールおよびアンインストール」を参照してください。

INSTALL PLUGIN でインストールされたプラグインの場合、PLUGIN_NAME および PLUGIN_LIBRARY 値は、mysql.plugin テーブルにも登録されます。

次のステートメントは同等です。

SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE, PLUGIN_LIBRARY, PLUGIN_LICENSE
FROM INFORMATION_SCHEMA.PLUGINS;
SHOW PLUGINS;

PLUGINS テーブル内の情報のベースを形成するプラグインデータ構造の詳細は、セクション24.2「MySQL プラグイン API」を参照してください。

プラグイン情報は、SHOW PLUGINS ステートメントを使用して利用することもできます。セクション13.7.5.26「SHOW PLUGINS 構文」を参照してください。

21.15 INFORMATION_SCHEMA PROCESSLIST テーブル

PROCESSLIST テーブルは、どのスレッドが動作しているかに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
IDIdMySQL 拡張
USERUserMySQL 拡張
HOSTHostMySQL 拡張
DBdbMySQL 拡張
COMMANDCommandMySQL 拡張
TIMETimeMySQL 拡張
STATEStateMySQL 拡張
INFOInfoMySQL 拡張

テーブルカラムの幅広い説明については、セクション13.7.5.30「SHOW PROCESSLIST 構文」を参照してください。

:

  • PROCESSLIST テーブルは、非標準テーブルです。

  • 対応する SHOW ステートメントの出力と同様に、PROCESSLIST テーブルは PROCESS の権限がない場合は、自身のスレッドに関する情報だけが表示されます。権限がある場合、ほかのスレッドに関する情報も表示されます。匿名ユーザーとしてでは、どの行も表示できません。

  • SQL ステートメントが INFORMATION_SCHEMA.PROCESSLIST を参照している場合、MySQL はステートメントの実行が開始されるとテーブル全体を一度移入するので、ステートメント中の読み取りの一貫性が保たれます。ただし、複数ステートメントトランザクションでは読み取りの一貫性はありません。

  • 処理情報は、performance_schema.threads テーブルから利用することもできます。ただし、threads へのアクセスには相互排他ロックは必要なく、サーバーパフォーマンスへの影響は最小です。INFORMATION_SCHEMA.PROCESSLIST および SHOW PROCESSLIST は、相互排他ロックを必要とするので、負のパフォーマンスの結果になります。threads はまた、バックグラウンドスレッドに関する情報も表示しますが、INFORMATION_SCHEMA.PROCESSLIST および SHOW PROCESSLIST は表示しません。これは、threads は、ほかのスレッド情報源では行えないアクティビティーのモニターに使用できることを意味します。

次のステートメントは同等です。

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
SHOW FULL PROCESSLIST

21.16 INFORMATION_SCHEMA PROFILING テーブル

PROFILING テーブルは、ステートメントプロファイリング情報を提供します。その内容は、SHOW PROFILES および SHOW PROFILE ステートメントで生成される情報に対応します (セクション13.7.5.32「SHOW PROFILES 構文」を参照してください)。profiling セッション変数は 1 に設定されないかぎり、テーブルは空です。

INFORMATION_SCHEMASHOW備考
QUERY_IDQuery_ID 
SEQ 
STATEStatus 
DURATIONDuration 
CPU_USERCPU_user 
CPU_SYSTEMCPU_system 
CONTEXT_VOLUNTARYContext_voluntary 
CONTEXT_INVOLUNTARYContext_involuntary 
BLOCK_OPS_INBlock_ops_in 
BLOCK_OPS_OUTBlock_ops_out 
MESSAGES_SENTMessages_sent 
MESSAGES_RECEIVEDMessages_received 
PAGE_FAULTS_MAJORPage_faults_major 
PAGE_FAULTS_MINORPage_faults_minor 
SWAPSSwaps 
SOURCE_FUNCTIONSource_function 
SOURCE_FILESource_file 
SOURCE_LINESource_line 

:

  • QUERY_ID は数値のステートメント識別子です。

  • SEQ は、同じ QUERY_ID 値を持つ行の表示順を示すシーケンス番号です。

  • STATE は、行の測定が適用されるプロファイリング状態です。

  • DURATION は、ステートメントの実行が、一定の状態に持続していた時間を秒単位で示します。

  • CPU_USER および CPU_SYSTEM はユーザーおよびシステムの CPU 使用率を秒単位で示します。

  • CONTEXT_VOLUNTARY および CONTEXT_INVOLUNTARY は、自発的および強制的コンテキストスイッチが行われた回数を示します。

  • BLOCK_OPS_IN および BLOCK_OPS_OUT は、ブロック入力および出力操作の数を示します。

  • MESSAGES_SENT および MESSAGES_RECEIVED は、送受信された通信メッセージの数を示します。

  • PAGE_FAULTS_MAJOR および PAGE_FAULTS_MINOR は、メジャーおよびマイナーページフォルトの数を示します。

  • SWAPS はスワップが行われた数を示します。

  • SOURCE_FUNCTIONSOURCE_FILE、および SOURCE_LINE は、プロファイルされた状態で実行されるソースコード内の箇所を示す情報を提供します。

21.17 INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTS テーブル

REFERENTIAL_CONSTRAINTS テーブルは、外部キーに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
CONSTRAINT_CATALOG def
CONSTRAINT_SCHEMA  
CONSTRAINT_NAME  
UNIQUE_CONSTRAINT_CATALOG def
UNIQUE_CONSTRAINT_SCHEMA  
UNIQUE_CONSTRAINT_NAME  
MATCH_OPTION  
UPDATE_RULE  
DELETE_RULE  
TABLE_NAME  
REFERENCED_TABLE_NAME  

:

  • TABLE_NAME の値は、INFORMATION_SCHEMA.TABLE_CONSTRAINTSTABLE_NAME と同じです。

  • CONSTRAINT_SCHEMA および CONSTRAINT_NAME は外部キーを識別します。

  • UNIQUE_CONSTRAINT_SCHEMAUNIQUE_CONSTRAINT_NAME、および REFERENCED_TABLE_NAME は参照キーを識別します。

  • このとき MATCH_OPTION の唯一有効な値は NONE です。

  • UPDATE_RULE または DELETE_RULE に指定可能な値は、CASCADESET NULLSET DEFAULTRESTRICTNO ACTION です。

21.18 INFORMATION_SCHEMA ROUTINES テーブル

ROUTINES テーブルはストアドルーチン (プロシージャーおよび関数の両方) に関する情報を提供します。ROUTINES テーブルには、ユーザー定義関数 (UDF) は含まれません。

mysql.procは、存在する場合、INFORMATION_SCHEMA.ROUTINES テーブルカラムに対応する mysql.proc テーブルカラムを示します。

INFORMATION_SCHEMAmysql.proc備考
SPECIFIC_NAMEspecific_name 
ROUTINE_CATALOG def
ROUTINE_SCHEMAdb 
ROUTINE_NAMEname 
ROUTINE_TYPEtype{PROCEDURE|FUNCTION}
DATA_TYPE COLUMNS テーブルの場合と同じ
CHARACTER_MAXIMUM_LENGTH COLUMNS テーブルの場合と同じ
CHARACTER_OCTET_LENGTH COLUMNS テーブルの場合と同じ
NUMERIC_PRECISION COLUMNS テーブルの場合と同じ
NUMERIC_SCALE COLUMNS テーブルの場合と同じ
DATETIME_PRECISION COLUMNS テーブルの場合と同じ
CHARACTER_SET_NAME COLUMNS テーブルの場合と同じ
COLLATION_NAME COLUMNS テーブルの場合と同じ
DTD_IDENTIFIER データ型ディスクリプタ
ROUTINE_BODY SQL
ROUTINE_DEFINITIONbody_utf8 
EXTERNAL_NAME NULL
EXTERNAL_LANGUAGElanguageNULL
PARAMETER_STYLE SQL
IS_DETERMINISTICis_deterministic 
SQL_DATA_ACCESSsql_data_access 
SQL_PATH NULL
SECURITY_TYPEsecurity_type 
CREATEDcreated 
LAST_ALTEREDmodified 
SQL_MODEsql_modeMySQL 拡張
ROUTINE_COMMENTcommentMySQL 拡張
DEFINERdefinerMySQL 拡張
CHARACTER_SET_CLIENT MySQL 拡張
COLLATION_CONNECTION MySQL 拡張
DATABASE_COLLATION MySQL 拡張

:

  • MySQL は EXTERNAL_LANGUAGE を次のように計算します。

    • mysql.proc.language='SQL' の場合、EXTERNAL_LANGUAGENULL になります

    • それ以外の場合、EXTERNAL_LANGUAGEmysql.proc.language に存在します。ただし、まだ外部言語がないので、これは常に NULL になります。

  • CREATED: ルーチンが作成された日時です。これは TIMESTAMP 値です。

  • LAST_ALTERED: ルーチンが最後に変更された日時です。これは TIMESTAMP 値です。ルーチンが作成されてから変更されなかった場合、このカラムは CREATED カラムと同じ値を保持します。

  • SQL_MODE: ルーチンが作成または変更されたときに有効であり、ルーチンを実行するときの SQL モードです。指定可能な値については、セクション5.1.7「サーバー SQL モード」を参照してください。

  • CHARACTER_SET_CLIENT: ルーチンが作成されたときの character_set_client システム変数のセッション値です。

  • COLLATION_CONNECTION: ルーチンが作成されたときの collation_connection システム変数のセッション値です。

  • DATABASE_COLLATION: ルーチンが関連付けられているデータベースの照合順序です。

  • DATA_TYPECHARACTER_MAXIMUM_LENGTHCHARACTER_OCTET_LENGTHNUMERIC_PRECISIONNUMERIC_SCALEDATETIME_PRECISIONCHARACTER_SET_NAME、および COLLATION_NAME カラムは、ストアドファンクションの RETURNS 句に対するデータ型に関する情報を提供します。ストアドルーチンがストアドプロシージャーである場合、これらのカラムはすべて NULL になります。MySQL 5.6.4 で DATETIME_PRECISION が追加されました。

  • ストアドファンクション RETURNS データ型に関する情報は、PARAMETERS テーブルでも利用できます。関数に対する戻り値のデータ型の行は、ORDINAL_POSITION 値が 0 である行として識別できます。

21.19 INFORMATION_SCHEMA SCHEMATA テーブル

スキーマはデータベースなので、SCHEMATA テーブルはデータベースに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
CATALOG_NAME def
SCHEMA_NAMEDatabase 
DEFAULT_CHARACTER_SET_NAME  
DEFAULT_COLLATION_NAME  
SQL_PATH NULL

次のステートメントは同等です。

SELECT SCHEMA_NAME AS `Database` FROM INFORMATION_SCHEMA.SCHEMATA [WHERE SCHEMA_NAME LIKE 'wild']
SHOW DATABASES [LIKE 'wild']

21.20 INFORMATION_SCHEMA SCHEMA_PRIVILEGES テーブル

SCHEMA_PRIVILEGES テーブルは、スキーマ (データベース) 権限に関する情報を提供します。この情報は mysql.db 付与テーブルにあります。

INFORMATION_SCHEMASHOW備考
GRANTEE 'user_name'@'host_name' 値、MySQL 拡張
TABLE_CATALOG def、MySQL 拡張
TABLE_SCHEMA MySQL 拡張
PRIVILEGE_TYPE MySQL 拡張
IS_GRANTABLE MySQL 拡張

:

  • これは非標準テーブルです。その値を mysql.db テーブルから取得します。

21.21 INFORMATION_SCHEMA STATISTICS テーブル

STATISTICS テーブルは、テーブルインデックスの情報を提供します。

INFORMATION_SCHEMASHOW備考
TABLE_CATALOG def
TABLE_SCHEMA = Database
TABLE_NAMETable 
NON_UNIQUENon_unique 
INDEX_SCHEMA = Database
INDEX_NAMEKey_name 
SEQ_IN_INDEXSeq_in_index 
COLUMN_NAMEColumn_name 
COLLATIONCollation 
CARDINALITYCardinality 
SUB_PARTSub_partMySQL 拡張
PACKEDPackedMySQL 拡張
NULLABLENullMySQL 拡張
INDEX_TYPEIndex_typeMySQL 拡張
COMMENTCommentMySQL 拡張

:

  • インデックスには標準のテーブルはありません。前述のリストは SQL Server 2000 が sp_statistics に対して返すものと似ていますが、名前 QUALIFIERCATALOG に、名前 OWNERSCHEMA に置き換えた点が異なります。

    明らかに、前述のテーブルと、SHOW INDEX の出力は同じ親から派生したものです。このため、すでに密接な相関関係になっています。

次のステートメントは同等です。

SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE table_name = 'tbl_name' AND table_schema = 'db_name'
SHOW INDEX FROM tbl_name FROM db_name

21.22 INFORMATION_SCHEMA TABLES テーブル

TABLES テーブルは、データベース内のテーブルに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
TABLE_CATALOG def
TABLE_SCHEMATable_... 
TABLE_NAMETable_... 
TABLE_TYPE  
ENGINEEngineMySQL 拡張
VERSIONVersionテーブルの .frm ファイルのバージョン番号、MySQL 拡張
ROW_FORMATRow_formatMySQL 拡張
TABLE_ROWSRowsMySQL 拡張
AVG_ROW_LENGTHAvg_row_lengthMySQL 拡張
DATA_LENGTHData_lengthMySQL 拡張
MAX_DATA_LENGTHMax_data_lengthMySQL 拡張
INDEX_LENGTHIndex_lengthMySQL 拡張
DATA_FREEData_freeMySQL 拡張
AUTO_INCREMENTAuto_incrementMySQL 拡張
CREATE_TIMECreate_timeMySQL 拡張
UPDATE_TIMEUpdate_timeMySQL 拡張
CHECK_TIMECheck_timeMySQL 拡張
TABLE_COLLATIONCollationMySQL 拡張
CHECKSUMChecksumMySQL 拡張
CREATE_OPTIONSCreate_optionsMySQL 拡張
TABLE_COMMENTCommentMySQL 拡張

:

  • TABLE_SCHEMA および TABLE_NAME は、Table_in_db1 など、SHOW 表示の単一のフィールドです。

  • TABLE_TYPEBASE TABLE または VIEW になります。現在、TABLES テーブルは TEMPORARY テーブルをリストしません。

  • パーティション化されたテーブルの場合、ENGINE カラムには、すべてのパーティションで使用されるストレージエンジンの名前が表示されます。(以前は、このカラムには、このようなテーブルに対し PARTITION が表示されていました。)

  • テーブルが INFORMATION_SCHEMA データベースにある場合、TABLE_ROWS カラムは NULL です。

    InnoDB テーブルの場合、行カウントは SQL 最適化で使用される単なる概算です。(InnoDB テーブルがパーティション化されている場合も、これは当てはまります。)

  • DATA_FREE カラムには、InnoDB テーブルの空き領域がバイト単位で表示されます。

  • テーブルのデフォルトの文字セットはありません。照合順序名は文字セット名で始まるため、TABLE_COLLATION は閉じています。

  • テーブルがパーティション化されている場合、CREATE_OPTIONS カラムには partitioned と表示されます。

次のステートメントは同等です。

SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'db_name' [AND table_name LIKE 'wild']
SHOW TABLES FROM db_name [LIKE 'wild']

21.23 INFORMATION_SCHEMA TABLESPACES テーブル

TABLESPACES テーブルは、アクティブなテーブルスペースに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
TABLESPACE_NAME MySQL 拡張
ENGINE MySQL 拡張
TABLESPACE_TYPE MySQL 拡張
LOGFILE_GROUP_NAME MySQL 拡張
EXTENT_SIZE MySQL 拡張
AUTOEXTEND_SIZE MySQL 拡張
MAXIMUM_SIZE MySQL 拡張
NODEGROUP_ID MySQL 拡張
TABLESPACE_COMMENT MySQL 拡張

21.24 INFORMATION_SCHEMA TABLE_CONSTRAINTS テーブル

TABLE_CONSTRAINTS テーブルは、どのテーブルに制約があるかを説明します。

INFORMATION_SCHEMASHOW備考
CONSTRAINT_CATALOG def
CONSTRAINT_SCHEMA  
CONSTRAINT_NAME  
TABLE_SCHEMA  
TABLE_NAME  
CONSTRAINT_TYPE  

:

  • CONSTRAINT_TYPE 値は、UNIQUEPRIMARY KEY、または FOREIGN KEY になります。

  • UNIQUE および PRIMARY KEY 情報は、Non_unique フィールドが 0 のときに SHOW INDEX の出力の Key_name フィールドから得られる情報とほぼ同じになります。

  • CONSTRAINT_TYPE カラムには、UNIQUEPRIMARY KEYFOREIGN KEYCHECK のいずれかの値を含められます。これは CHAR (非 ENUM) カラムです。CHECK 値は CHECK をサポートするまでは利用できません。

21.25 INFORMATION_SCHEMA TABLE_PRIVILEGES テーブル

TABLE_PRIVILEGES テーブルは、テーブル権限に関する情報を提供します。この情報は mysql.tables_priv 付与テーブルからのものです。

INFORMATION_SCHEMASHOW備考
GRANTEE 'user_name'@'host_name'
TABLE_CATALOG def
TABLE_SCHEMA  
TABLE_NAME  
PRIVILEGE_TYPE  
IS_GRANTABLE  

:

  • PRIVILEGE_TYPE は、SELECTINSERTUPDATEREFERENCESALTERINDEXDROPCREATE VIEW の値のいずれか (1 つのみ) を含むことができます。

次のステートメントは同等ではありません

SELECT ... FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES
SHOW GRANTS ...

21.26 INFORMATION_SCHEMA TRIGGERS テーブル

TRIGGERS テーブルはトリガーに関する情報を提供します。自身が TRIGGER 権限を保有しているデータベースとテーブルの情報だけを表示できます。

INFORMATION_SCHEMASHOW備考
TRIGGER_CATALOG def
TRIGGER_SCHEMA  
TRIGGER_NAMETrigger 
EVENT_MANIPULATIONEvent 
EVENT_OBJECT_CATALOG def
EVENT_OBJECT_SCHEMA  
EVENT_OBJECT_TABLETable 
ACTION_ORDER 0
ACTION_CONDITION NULL
ACTION_STATEMENTStatement 
ACTION_ORIENTATION ROW
ACTION_TIMINGTiming 
ACTION_REFERENCE_OLD_TABLE NULL
ACTION_REFERENCE_NEW_TABLE NULL
ACTION_REFERENCE_OLD_ROW OLD
ACTION_REFERENCE_NEW_ROW NEW
CREATEDCreated 
SQL_MODEsql_modeMySQL 拡張
DEFINERDefinerMySQL 拡張
CHARACTER_SET_CLIENTcharacter_set_clientMySQL 拡張
COLLATION_CONNECTIONcollation_connectionMySQL 拡張
DATABASE_COLLATIONDatabase CollationMySQL 拡張

:

  • SHOWカラム内の名前は、SHOW CREATE TRIGGER ではなく SHOW TRIGGERS ステートメントを示します。セクション13.7.5.39「SHOW TRIGGERS 構文」を参照してください。

  • TRIGGER_SCHEMA および TRIGGER_NAME: それぞれ、トリガーが実行されるデータベースの名前とトリガー名です。

  • EVENT_MANIPULATION: トリガーイベントです。これは、トリガーが有効になる、関連付けられたテーブルに対する操作の種類です。値は、'INSERT' (行が挿入された場合)、'DELETE' (行が削除された場合)、または 'UPDATE' (行が変更された場合) です。

  • EVENT_OBJECT_SCHEMA および EVENT_OBJECT_TABLE: セクション20.3「トリガーの使用」に記したように、すべてのトリガーは厳密に 1 つのテーブルに関連付けられます。これらのカラムには、このテーブルが存在するデータベースと、テーブル名がそれぞれ示されます。

  • ACTION_ORDER: 同じテーブルで類似したトリガーのリスト内の、トリガーアクションの順序位置です。現在、この値は常に 0 です。これは、同じテーブルで同じ EVENT_MANIPULATION および ACTION_TIMING のトリガーを複数持つことはできないためです。

  • ACTION_STATEMENT: トリガー本体です。つまり、トリガーの有効時に実行されるステートメントです。このテキストは UTF-8 エンコーディングを使用します。

  • ACTION_ORIENTATION: 常に 'ROW' の値を含みます。

  • ACTION_TIMING: トリガーが有効になるのが、トリガーイベントの前かあとかを指定します。値は 'BEFORE' または 'AFTER' です。

  • ACTION_REFERENCE_OLD_ROW および ACTION_REFERENCE_NEW_ROW: それぞれ古いカラム識別子と新しいカラム識別子です。このことは、ACTION_REFERENCE_OLD_ROW が常に 'OLD' の値を含み、ACTION_REFERENCE_NEW_ROW が常に 'NEW' の値を含むことを意味します。

  • SQL_MODE: トリガーが作成されたときに有効であり、トリガーを実行するときの SQL モードです。指定可能な値については、セクション5.1.7「サーバー SQL モード」を参照してください。

  • DEFINER: 'user_name'@'host_name' 形式で示した、トリガーを作成したユーザーのアカウントです。

  • CHARACTER_SET_CLIENT: トリガーが作成されたときの character_set_client システム変数のセッション値です。

  • COLLATION_CONNECTION: トリガーが作成されたときの collation_connection システム変数のセッション値です。

  • DATABASE_COLLATION: トリガーが関連付けられているデータベースの照合順序です。

  • ACTION_CONDITIONACTION_REFERENCE_OLD_TABLEACTION_REFERENCE_NEW_TABLE、および CREATED のカラムには現在、NULL が常に含まれます。

セクション20.3「トリガーの使用」で定義された ins_sum トリガーを使用した例です。

mysql> SELECT * FROM INFORMATION_SCHEMA.TRIGGERS -> WHERE TRIGGER_SCHEMA='test' AND TRIGGER_NAME='ins_sum'\G*************************** 1. row *************************** TRIGGER_CATALOG: def TRIGGER_SCHEMA: test TRIGGER_NAME: ins_sum EVENT_MANIPULATION: INSERT EVENT_OBJECT_CATALOG: def EVENT_OBJECT_SCHEMA: test EVENT_OBJECT_TABLE: account ACTION_ORDER: 0 ACTION_CONDITION: NULL ACTION_STATEMENT: SET @sum = @sum + NEW.amount ACTION_ORIENTATION: ROW ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL ACTION_REFERENCE_OLD_ROW: OLD ACTION_REFERENCE_NEW_ROW: NEW CREATED: NULL SQL_MODE: NO_ENGINE_SUBSTITUTION DEFINER: me@localhost CHARACTER_SET_CLIENT: utf8 COLLATION_CONNECTION: utf8_general_ci DATABASE_COLLATION: latin1_swedish_ci

21.27 INFORMATION_SCHEMA USER_PRIVILEGES テーブル

USER_PRIVILEGES テーブルは、グローバル権限に関する情報を提供します。この情報は mysql.user 付与テーブルにあります。

INFORMATION_SCHEMASHOW備考
GRANTEE 'user_name'@'host_name' 値、MySQL 拡張
TABLE_CATALOG def、MySQL 拡張
PRIVILEGE_TYPE MySQL 拡張
IS_GRANTABLE MySQL 拡張

:

  • これは非標準テーブルです。この値は、mysql.user テーブルから取得されます。

21.28 INFORMATION_SCHEMA VIEWS テーブル

VIEWS テーブルは、データベース内のビューに関する情報を提供します。このテーブルにアクセスするには SHOW VIEW 権限が必要です。

INFORMATION_SCHEMASHOW備考
TABLE_CATALOG def
TABLE_SCHEMA  
TABLE_NAME  
VIEW_DEFINITION  
CHECK_OPTION  
IS_UPDATABLE  
DEFINER  
SECURITY_TYPE  
CHARACTER_SET_CLIENT MySQL 拡張
COLLATION_CONNECTION MySQL 拡張

:

  • VIEW_DEFINITION カラムには、SHOW CREATE VIEW が生成する Create Table フィールドに表示されるほとんどのものが存在します。SELECT より前の語をスキップし、WITH CHECK OPTION の語をスキップします。元のステートメントが次のとおりだったとします。

    CREATE VIEW v AS SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1 WITH CHECK OPTION;

    この場合、ビュー定義は次のようになります。

    SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1
  • CHECK_OPTION カラムは、NONECASCADE、または LOCAL の値になります。

  • MySQL は、CREATE VIEW 時に、ビューの更新可能性フラグというフラグを設定します。UPDATE および DELETE (および同様の操作) がビューで有効な場合、フラグは YES (true) に設定されます。それ以外の場合、フラグは NO (false) に設定されます。VIEWS テーブルの IS_UPDATABLE カラムは、このフラグのステータスを表示します。これは、ビューが更新可能であるかどうかをサーバーが常に把握していることを意味します。ビューが更新可能ではない場合、UPDATEDELETEINSERT などのステートメントは無効であり、拒否されます。(ビューが更新可能な場合でも、挿入できない場合があります。詳細は、セクション13.1.20「CREATE VIEW 構文」を参照してください。)

  • DEFINER: 'user_name'@'host_name' 形式で示した、ビューを作成したユーザーのアカウントです。SECURITY_TYPE には、DEFINER または INVOKER の値があります。

  • CHARACTER_SET_CLIENT: ビューが作成されたときの character_set_client システム変数のセッション値です。

  • COLLATION_CONNECTION: ビューが作成されたときの collation_connection システム変数のセッション値です。

MySQL では、異なる sql_mode 設定を使用すると、サポートする SQL 構文のタイプをサーバーに指示できます。たとえば、ANSI SQL モードを使用すると、クエリーで、MySQL で標準 SQL 連結演算子の二重バー (||) が正しく解釈されます。その後、項目を連結するビューを作成した場合、sql_mode 設定を ANSI とは別の値に変更すると、そのビューが無効になるという懸念がある場合があります。ただし、そのようなことはありません。MySQL は、記述方法には関係なく、常にビュー定義を正規の形式で同じ方法で格納します。サーバーが二重バーの連結演算子を CONCAT() 関数にどのように変更するかを示す例を次に示します。

mysql> SET sql_mode = 'ANSI';Query OK, 0 rows affected (0.00 sec)
mysql> CREATE VIEW test.v AS SELECT 'a' || 'b' as col1;Query OK, 0 rows affected (0.00 sec)
mysql> SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS -> WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v';+----------------------------------+
| VIEW_DEFINITION |
+----------------------------------+
| select concat('a','b') AS `col1` |
+----------------------------------+
1 row in set (0.00 sec)

ビュー定義を正規の形式で格納する利点は、あとで sql_mode の値を変更しても、ビューの結果に影響を与えないことにあります。ただし、SELECT の前にあるコメントが、サーバーによって定義から取り除かれるというその他の影響があります。

21.29 InnoDB の INFORMATION_SCHEMA テーブル

21.29.1 INFORMATION_SCHEMA INNODB_CMP および INNODB_CMP_RESET テーブル
21.29.2 INFORMATION_SCHEMA INNODB_CMP_PER_INDEX および INNODB_CMP_PER_INDEX_RESET テーブル
21.29.3 INFORMATION_SCHEMA INNODB_CMPMEM および INNODB_CMPMEM_RESET テーブル
21.29.4 INFORMATION_SCHEMA INNODB_TRX テーブル
21.29.5 INFORMATION_SCHEMA INNODB_LOCKS テーブル
21.29.6 INFORMATION_SCHEMA INNODB_LOCK_WAITS テーブル
21.29.7 INFORMATION_SCHEMA INNODB_SYS_TABLES テーブル
21.29.8 INFORMATION_SCHEMA INNODB_SYS_INDEXES テーブル
21.29.9 INFORMATION_SCHEMA INNODB_SYS_COLUMNS テーブル
21.29.10 INFORMATION_SCHEMA INNODB_SYS_FIELDS テーブル
21.29.11 INFORMATION_SCHEMA INNODB_SYS_FOREIGN テーブル
21.29.12 INFORMATION_SCHEMA INNODB_SYS_FOREIGN_COLS テーブル
21.29.13 INFORMATION_SCHEMA INNODB_SYS_TABLESTATS ビュー
21.29.14 INFORMATION_SCHEMA INNODB_SYS_DATAFILES テーブル
21.29.15 INFORMATION_SCHEMA INNODB_SYS_TABLESPACES テーブル
21.29.16 INFORMATION_SCHEMA INNODB_BUFFER_PAGE テーブル
21.29.17 INFORMATION_SCHEMA INNODB_BUFFER_PAGE_LRU テーブル
21.29.18 INFORMATION_SCHEMA INNODB_BUFFER_POOL_STATS テーブル
21.29.19 INFORMATION_SCHEMA INNODB_METRICS テーブル
21.29.20 INFORMATION_SCHEMA INNODB_FT_CONFIG テーブル
21.29.21 INFORMATION_SCHEMA INNODB_FT_DEFAULT_STOPWORD テーブル
21.29.22 INFORMATION_SCHEMA INNODB_FT_INDEX_TABLE テーブル
21.29.23 INFORMATION_SCHEMA INNODB_FT_INDEX_CACHE テーブル
21.29.24 INFORMATION_SCHEMA INNODB_FT_DELETED テーブル
21.29.25 INFORMATION_SCHEMA INNODB_FT_BEING_DELETED テーブル

このセクションでは、InnoDBINFORMATION_SCHEMA テーブルのテーブル定義について説明します。関連する情報と例については、セクション14.14「InnoDB INFORMATION_SCHEMA テーブル」を参照してください。

InnoDBINFORMATION_SCHEMA テーブルは、進行中の InnoDB アクティビティーのモニタリング、問題になる前の非効率性の検出、またはパフォーマンスおよび容量の問題のトラブルシューティングに使用できます。データベースが増大しさらにビジーになり、ハードウェアの容量の限度に達したときに、データベースがスムーズに実行し続けられるようにこれらの点をモニターし調整します。

21.29.1 INFORMATION_SCHEMA INNODB_CMP および INNODB_CMP_RESET テーブル

INNODB_CMP および INNODB_CMP_RESET テーブルには、圧縮InnoDB テーブルに関連した操作に関するステータス情報が含まれます。

表 21.1 INNODB_CMP および INNODB_CMP_RESET のカラム

カラム名説明
PAGE_SIZE圧縮ページのサイズ (バイト単位)。
COMPRESS_OPSサイズ PAGE_SIZE の B ツリーページが圧縮された回数。空のページが作成されたり、非圧縮変更ログ用の領域が不足したりするたびに、ページが圧縮されます。
COMPRESS_OPS_OKサイズ PAGE_SIZE の B ツリーページの圧縮が成功した回数。このカウントが COMPRESS_OPS を超えることは決してありません。
COMPRESS_TIMEサイズ PAGE_SIZE の B ツリーページの圧縮への試行で費やされた合計時間 (秒単位)。
UNCOMPRESS_OPSサイズ PAGE_SIZE の B ツリーページが圧縮解除された回数。圧縮が失敗したときや、圧縮解除されたページがバッファープールに存在しない場合に最初にアクセスするときに、B ツリーページは圧縮解除されます。
UNCOMPRESS_TIMEサイズ PAGE_SIZE の B ツリーページの圧縮解除に費やされた合計時間 (秒単位)。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_CMP \G
*************************** 1. row *************************** page_size: 1024 compress_ops: 0
compress_ops_ok: 0 compress_time: 0 uncompress_ops: 0
uncompress_time: 0
*************************** 2. row *************************** page_size: 2048 compress_ops: 0
compress_ops_ok: 0 compress_time: 0 uncompress_ops: 0
uncompress_time: 0
*************************** 3. row *************************** page_size: 4096 compress_ops: 0
compress_ops_ok: 0 compress_time: 0 uncompress_ops: 0
uncompress_time: 0
*************************** 4. row *************************** page_size: 8192 compress_ops: 86955
compress_ops_ok: 81182 compress_time: 27 uncompress_ops: 26828
uncompress_time: 5
*************************** 5. row *************************** page_size: 16384 compress_ops: 0
compress_ops_ok: 0 compress_time: 0 uncompress_ops: 0
uncompress_time: 0
5 rows in set (0.00 sec)

:

21.29.2 INFORMATION_SCHEMA INNODB_CMP_PER_INDEX および INNODB_CMP_PER_INDEX_RESET テーブル

INNODB_CMP_PER_INDEX および INNODB_CMP_PER_INDEX_RESET テーブルには、圧縮InnoDB テーブルおよびインデックスに関連した操作に関するステータス情報と、データベース、テーブル、およびインデックスの組み合わせごとの統計が含まれており、特定のテーブルの圧縮のパフォーマンスと有用性を評価する場合に役立ちます。

圧縮 InnoDB テーブルについては、テーブルデータとすべてのセカンダリインデックスの両方が圧縮されます。このコンテキストでは、テーブルデータは、単なる別のインデックス、たまたますべてのカラムが含まれているインデックス (クラスタ化されたインデックス) として扱われます。

表 21.2 INNODB_CMP_PER_INDEX および INNODB_CMP_PER_INDEX_RESET のカラム

カラム名説明
DATABASE_NAME適用可能なテーブルを含むデータベース。
TABLE_NAME圧縮統計についてモニターするテーブル。
INDEX_NAME圧縮統計についてモニターするインデックス。
COMPRESS_OPS圧縮操作の試行回数。空のページが作成されたり、非圧縮変更ログ用の領域が不足したりするたびに、ページが圧縮されます。
COMPRESS_OPS_OK成功した圧縮操作の数。COMPRESS_OPS 値から引き算すると、圧縮の失敗の回数が求められます。COMPRESS_OPS 値で割り算すると、圧縮の失敗の割合が求められます。
COMPRESS_TIMEこのインデックスのデータの圧縮に使用された CPU 使用時間の合計 (秒単位)。
UNCOMPRESS_OPS実行された圧縮解除操作の回数。圧縮 InnoDB ページは、圧縮が失敗した場合はいつでも圧縮解除されます。または、バッファープールにおいてはじめて圧縮ページへのアクセスがあり、圧縮解除されたページが存在しないときに圧縮解除されます。
UNCOMPRESS_TIMEこのインデックスのデータの圧縮解除に使用された CPU 使用時間の合計 (秒単位)。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX \G
*************************** 1. row *************************** database_name: employees table_name: salaries index_name: PRIMARY compress_ops: 0
compress_ops_ok: 0 compress_time: 0 uncompress_ops: 23451
uncompress_time: 4
*************************** 2. row *************************** database_name: employees table_name: salaries index_name: emp_no compress_ops: 0
compress_ops_ok: 0 compress_time: 0 uncompress_ops: 1597
uncompress_time: 0
2 rows in set (0.00 sec)

:

  • これらのテーブルを使用して、特定のテーブルまたはインデックス、あるいはその両方について InnoDB テーブル圧縮の有効性を測定します。

  • DESCRIBE または SHOW COLUMNS を使用すると、データ型とデフォルト値を含む、これらのテーブルのカラムに関する追加情報を表示できます。

  • これらのテーブルをクエリーするには PROCESS 権限が必要です。

  • すべてのインデックスで個別に測定値を収集すると、大幅なパフォーマンスオーバーヘッドが発生するので、デフォルトでは INNODB_CMP_PER_INDEX および INNODB_CMP_PER_INDEX_RESET 統計は収集されません。モニターする圧縮テーブルで操作を実行する前に、innodb_cmp_per_index_enabled 構成オプションを有効にする必要があります。

  • 使用法については、セクション14.7.4「実行時の圧縮のモニタリング」およびセクション14.14.1.3「圧縮情報スキーマテーブルの使用」を参照してください。InnoDB テーブルの圧縮に関する一般情報については、セクション14.7「InnoDB 圧縮テーブル」を参照してください。

21.29.3 INFORMATION_SCHEMA INNODB_CMPMEM および INNODB_CMPMEM_RESET テーブル

INNODB_CMPMEM および INNODB_CMPMEM_RESET テーブルには、InnoDBバッファープール内の圧縮ページに関するステータス情報が含まれます。

表 21.3 INNODB_CMPMEM および INNODB_CMPMEM_RESET のカラム

カラム名説明
PAGE_SIZEブロックサイズ (バイト単位)。このテーブルの各レコードは、このサイズのブロックを記述します。
BUFFER_POOL_INSTANCEバッファープールインスタンスの一意の識別子。
PAGES_USED現在使用されているサイズ PAGE_SIZE のブロックの数。
PAGES_FREE現在割り当てに使用できるサイズ PAGE_SIZE のブロックの数。このカラムは、メモリープールの外部断片化を示します。これらの数値は最大 1 にしてください。
RELOCATION_OPSサイズ PAGE_SIZE のブロックが再配置された回数。バディーシステムは、より大きな解放されたブロックを生成しようとするときに、解放されたブロックの割り当て済みのバディーを再配置できます。テーブル INNODB_CMPMEM_RESET から読み取ると、このカウントはリセットされます。
RELOCATION_TIMEサイズ PAGE_SIZE のブロックの再配置に費やされた合計時間 (マイクロ秒)。テーブル INNODB_CMPMEM_RESET から読み取ると、このカウントはリセットされます。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_CMPMEM \G
*************************** 1. row *************************** page_size: 1024
buffer_pool_instance: 0 pages_used: 0 pages_free: 0 relocation_ops: 0 relocation_time: 0
*************************** 2. row *************************** page_size: 2048
buffer_pool_instance: 0 pages_used: 0 pages_free: 0 relocation_ops: 0 relocation_time: 0
*************************** 3. row *************************** page_size: 4096
buffer_pool_instance: 0 pages_used: 0 pages_free: 0 relocation_ops: 0 relocation_time: 0
*************************** 4. row *************************** page_size: 8192
buffer_pool_instance: 0 pages_used: 7673 pages_free: 15 relocation_ops: 4638 relocation_time: 0
*************************** 5. row *************************** page_size: 16384
buffer_pool_instance: 0 pages_used: 0 pages_free: 0 relocation_ops: 0 relocation_time: 0
5 rows in set (0.00 sec)

:

21.29.4 INFORMATION_SCHEMA INNODB_TRX テーブル

INNODB_TRX テーブルには、トランザクションがロックを待機しているかどうか、トランザクションが開始した時点、トランザクションが実行している SQL ステートメント (存在する場合) など、InnoDB 内部で現在実行している (読み取り専用トランザクションを除く) すべてのトランザクションに関する情報が含まれます。

表 21.4 INNODB_TRX のカラム

カラム名説明
TRX_IDInnoDB 内部の一意のトランザクション ID 番号。(MySQL 5.6 以降、これらの ID は、読み取り専用で非ロックのトランザクションでは作成されません。詳細は、セクション14.13.14「InnoDB の読み取り専用トランザクションの最適化」を参照してください。)
TRX_WEIGHTトランザクションの重み。これは、トランザクションが変更した行の数とロックした行の数を反映したものです (ただし必ずしも正確な数ではありません)。デッドロックを解決するために、InnoDB は、ロールバックする対象として重みがもっとも小さなトランザクションを選択します。非トランザクションテーブルを変更したトランザクションは、変更された行およびロックされた行の数に関係なく、ほかのトランザクションより重みが高いと見なされます。
TRX_STATEトランザクション実行の状態。RUNNINGLOCK WAITROLLING BACK、または COMMITTING のいずれかです。
TRX_STARTEDトランザクションの開始時間。
TRX_REQUESTED_LOCK_IDトランザクションが現在待機しているロック ID (TRX_STATELOCK WAIT である場合。それ以外は NULL)。ロックに関する詳細は、LOCK_IDINNODB_LOCKS と結合することによって参照できます。
TRX_WAIT_STARTEDトランザクションがロックを待機し始めた時間 (TRX_STATELOCK WAITの場合。それ以外は NULL)。
TRX_MYSQL_THREAD_IDMySQL スレッド ID。IDPROCESSLIST と結合する場合に使用できます。セクション14.14.2.3.1「PROCESSLIST データとの不整合の可能性」を参照してください。
TRX_QUERYトランザクションにより実行されている SQL クエリー。
TRX_OPERATION_STATEトランザクションの現在の操作、または NULL
TRX_TABLES_IN_USEこのトランザクションの現在の SQL ステートメントを処理しているときに使用される InnoDB テーブルの数。
TRX_TABLES_LOCKED現在の SQL ステートメントが行ロックを持っている、InnoDB テーブルの数。(これらはテーブルロックではなく行ロックなので、一部の行がロックされているかどうかにかかわらず、通常、複数のトランザクションによるテーブルからの読み取りおよびテーブルへの書き込みを実行できます。)
TRX_LOCK_STRUCTSトランザクションで予約されたロックの数。
TRX_LOCK_MEMORY_BYTESこのトランザクションのロック構造によってメモリー内で使用された合計サイズ。
TRX_ROWS_LOCKEDこのトランザクションによってロックされた行の概数。この値には、物理的には存在するがトランザクションから認識できない削除マークが付けられた行が含まれる場合があります。
TRX_ROWS_MODIFIEDこのトランザクションで変更および挿入された行の数。
TRX_CONCURRENCY_TICKETSinnodb_concurrency_tickets オプションによる指定に従い、スワップアウトされる前に現在のトランザクションで行える作業量を示す値。
TRX_ISOLATION_LEVEL現在のトランザクションの分離レベル。
TRX_UNIQUE_CHECKS現在のトランザクションで一意チェックがオンになっているか、オフになっているか。(たとえば一括データロード中にオフになっている場合があります。)
TRX_FOREIGN_KEY_CHECKS現在のトランザクションで外部キーチェックがオンになっているか、オフになっているか。(たとえば一括データロード中にオフになっている場合があります。)
TRX_LAST_FOREIGN_KEY_ERROR最後の FK エラーの詳細なエラーメッセージか、NULL
TRX_ADAPTIVE_HASH_LATCHEDアダプティブハッシュインデックスが現在のトランザクションによってロックされているかどうか。(一度に 1 つのトランザクションだけがアダプティブハッシュインデックスを変更できます。)
TRX_ADAPTIVE_HASH_TIMEOUTアダプティブハッシュインデックスの検索ラッチをすぐに破棄するか、MySQL からの呼び出し全体で保持するか。AHI 競合がない場合、この値はゼロのままで、ステートメントは終了するまでラッチを保持します。競合の間、ゼロまでカウントダウンし、ステートメントは各行ルックアップの直後にラッチを解放します。
TRX_IS_READ_ONLY

1 の値は、トランザクションが読み取り専用であることを示します (5.6.4 以降。)

TRX_AUTOCOMMIT_NON_LOCKING

1 の値は、トランザクションが、FOR UPDATE 句または LOCK IN SHARED MODE 句を使用していない SELECT ステートメントであり、この 1 つのステートメントだけがトランザクションに含まれるように autocommit 設定をオンにして実行していることを示します (5.6.4 以降)。このカラムと TRX_IS_READ_ONLY がどちらも 1 である場合、InnoDB は、テーブルデータを変更するトランザクションと関連付けられたオーバーヘッドを軽減するように、トランザクションを最適化します。


:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX \G
*************************** 1. row *************************** trx_id: 3298 trx_state: RUNNING trx_started: 2014-11-19 13:54:39 trx_requested_lock_id: NULL trx_wait_started: NULL trx_weight: 316436 trx_mysql_thread_id: 2 trx_query: DELETE FROM employees.salaries WHERE salary > 65000 trx_operation_state: updating or deleting trx_tables_in_use: 1 trx_tables_locked: 1 trx_lock_structs: 1621 trx_lock_memory_bytes: 243240 trx_rows_locked: 759343 trx_rows_modified: 314815 trx_concurrency_tickets: 0 trx_isolation_level: REPEATABLE READ trx_unique_checks: 1 trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL trx_adaptive_hash_latched: 0 trx_adaptive_hash_timeout: 10000 trx_is_read_only: 0
trx_autocommit_non_locking: 0

:

21.29.5 INFORMATION_SCHEMA INNODB_LOCKS テーブル

INNODB_LOCKS テーブルには、InnoDB トランザクションが要求したがまだ取得されていない各ロックに関する情報と、別のトランザクションをブロックしているトランザクションが保持している各ロックに関する情報が含まれます。

表 21.5 INNODB_LOCKS のカラム

カラム名説明
LOCK_IDInnoDB 内部の一意のロック ID 番号。これは不明瞭な文字列として扱ってください。LOCK_ID には現在、TRX_ID が含まれますが、LOCK_ID 内のデータの形式は今後のリリースでも同じである保証はありません。LOCK_ID 値を解析するプログラムを作成しないでください。
LOCK_TRX_IDこのロックを保持するトランザクションの ID。トランザクションに関する詳細は、TRX_IDINNODB_TRX と結合すると参照できます。
LOCK_MODEロックのモード。SXISIXS_GAPX_GAPIS_GAPIX_GAP、または AUTO_INC のいずれかになり、それぞれ共有、排他的、インテンション共有、インテンション排他的行ロック、共有および排他的ギャップロック、インテンション共有およびインテンション排他的ギャップロック、および自動インクリメントテーブルレベルロックを表します。InnoDB ロックに関する情報については、セクション14.2.3「InnoDB のロックモード」およびセクション14.2.2「InnoDB のトランザクションモデルおよびロック」のセクションを参照してください。
LOCK_TYPEロックのタイプ。RECORD または TABLE のいずれかで、それぞれレコード (行) レベル、テーブルレベルのロックを表します。
LOCK_TABLEロックされているテーブルか、ロックされたレコードを含むテーブルの名前。
LOCK_INDEXLOCK_TYPE='RECORD' の場合はインデックスの名前、それ以外の場合は NULL
LOCK_SPACELOCK_TYPE='RECORD' の場合はロックされたレコードのテーブルスペース ID、それ以外の場合は NULL
LOCK_PAGELOCK_TYPE='RECORD' の場合はロックされたレコードのページ番号、それ以外の場合は NULL
LOCK_RECLOCK_TYPE='RECORD' の場合はページ内のロックされたレコードのヒープ番号、それ以外の場合は NULL
LOCK_DATALOCK_TYPE='RECORD' の場合はロックされたレコードの主キー値、それ以外の場合は NULL。このカラムには、ロックされた行の主キーカラムの値が含まれ、有効な SQL 文字列として書式設定されています (SQL コマンドにコピーできるようになっています)。主キーがない場合、InnoDB 内部の一意の行 ID 番号が使用されます。インデックスの最大値を超えるキー値または範囲に対してギャップロックが行われた場合、LOCK_DATAsupremum pseudo-recordとレポートします。ロックされたレコードを含むページがバッファープール内に存在しない場合 (ロックが保持されていた間にディスクにページアウトされた場合)、InnoDB は、不要なディスク操作を回避するするために、ディスクからページをフェッチしません。代わりに、LOCK_DATANULL に設定されます。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS \G
*************************** 1. row *************************** lock_id: 3723:72:3:2
lock_trx_id: 3723 lock_mode: X lock_type: RECORD lock_table: `mysql`.`t` lock_index: PRIMARY lock_space: 72 lock_page: 3 lock_rec: 2 lock_data: 1, 9
*************************** 2. row *************************** lock_id: 3722:72:3:2
lock_trx_id: 3722 lock_mode: S lock_type: RECORD lock_table: `mysql`.`t` lock_index: PRIMARY lock_space: 72 lock_page: 3 lock_rec: 2 lock_data: 1, 9
2 rows in set (0.01 sec)

:

21.29.6 INFORMATION_SCHEMA INNODB_LOCK_WAITS テーブル

INNODB_LOCK_WAITS テーブルには、ブロックされている InnoDB トランザクションごとに 1 つ以上の行が含まれ、トランザクションで要求したロックと、その要求をブロックしているすべてのロックを示します。

表 21.6 INNODB_LOCK_WAITS のカラム

カラム名説明
REQUESTING_TRX_ID要求しているトランザクションの ID。
REQUESTED_LOCK_IDトランザクションが待機しているロックの ID。ロックに関する詳細は、LOCK_IDINNODB_LOCKS と結合することによって参照できます。
BLOCKING_TRX_IDブロックしているトランザクションの ID。
BLOCKING_LOCK_ID別のトランザクションが処理できないようにブロックしているトランザクションが保持しているロックの ID。ロックに関する詳細は、LOCK_IDINNODB_LOCKS と結合することによって参照できます。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS \G
*************************** 1. row ***************************
requesting_trx_id: 3396
requested_lock_id: 3396:91:3:2 blocking_trx_id: 3395 blocking_lock_id: 3395:91:3:2
1 row in set (0.00 sec)

:

21.29.7 INFORMATION_SCHEMA INNODB_SYS_TABLES テーブル

INNODB_SYS_TABLES テーブルは、InnoDB データディクショナリ内の SYS_TABLES テーブルの情報と同等の、InnoDB テーブルに関するメタデータを提供します。

関連する使用法と使用例については、セクション14.14.3「InnoDB INFORMATION_SCHEMA システムテーブル」を参照してください。

表 21.7 INNODB_SYS_TABLES のカラム

カラム名説明
TABLE_IDインスタンスのすべてのデータベースで一意の各 InnoDB テーブルの識別子。
NAMEテーブルの名前。test/t1 のように、必要に応じてデータベース名が前に置かれます。InnoDB システムテーブル名はすべて大文字です。データベースおよびユーザーテーブルの名前の大文字/小文字は、もともと定義されていたものと同じで、lower_case_table_names 設定による影響を受ける可能性があります。
FLAGこの値は、行フォーマット、圧縮ページサイズ (該当する場合)、DATA DIRECTORY 句の CREATE TABLE または ALTER TABLE での使用の有無などのテーブルフォーマットおよびストレージ特性に関するビットレベル情報を提供します。
N_COLSテーブル内のカラムの数。レポートされる数値には、InnoDB によって作成される 3 つの非表示カラム (DB_ROW_IDDB_TRX_IDDB_ROLL_PTR) が含まれます。
SPACEテーブルが存在するテーブルスペースの識別子。0 は InnoDBシステムテーブルスペースを示します。ほかの数値はすべて、個別の .ibd ファイルを使用して file-per-table モードで作成されたテーブルを表します。この識別子は、TRUNCATE TABLE ステートメントのあとでも同じままです。ゼロ以外の値では、この識別子は、このインスタンス内のすべてのデータベース間のテーブルで一意です。
FILE_FORMATテーブルのファイル形式 (Antelope または Barracuda)。
ROW_FORMATテーブルの行フォーマット (Compact、Redundant、Dynamic、または Compressed)。
ZIP_PAGE_SIZEZip ページサイズ。Compressed 行フォーマットを使用するテーブルにのみ適用されます。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE TABLE_ID = 74 \G
*************************** 1. row *************************** TABLE_ID: 74 NAME: test/t1 FLAG: 1 N_COLS: 6 SPACE: 60 FILE_FORMAT: Antelope ROW_FORMAT: Compact
ZIP_PAGE_SIZE: 0
1 row in set (0.00 sec)

:

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

INNODB_SYS_TABLES.FLAG カラム値の解釈

INNODB_SYS_TABLES.FLAG カラムは、テーブルのフォーマットおよびストレージ特性に関するビットレベル情報を提供します。次の表に示された該当する 10 進数値を一緒に付加すると、FLAG カラム値を解釈できます。

表 21.8 INNODB_SYS_TABLES FLAG カラムデータを解釈するためのビット位置値

ビット位置説明10 進数値
0行フォーマットが REDUNDANT でない場合、このビットが設定されます。つまり、行フォーマットが COMPACTDYNAMIC、または COMPRESSED の場合に設定されます。
  • 0 - REDUNDANT

  • 1 - COMPACTDYNAMIC、または COMPRESSED

1-4これらの 4 つのビットには、テーブルの圧縮されたページサイズを表す小さな数値が含まれます。INNODB_SYS_TABLES.ZIP_PAGE_SIZE フィールドにも、該当する場合、圧縮されたページサイズがレポートされます。
  • 0 - 圧縮なし

  • 2 - 1024 バイトの圧縮ページサイズ

  • 4 - 2048 バイトの圧縮ページサイズ

  • 6 - 4096 バイトの圧縮ページサイズ

  • 8 - 8192 バイトの圧縮ページサイズ

  • 10 - 16384 バイトの圧縮ページサイズ

5行フォーマットが DYNAMIC または COMPRESSED の場合、このビットが設定されます。
  • 0 - REDUNDANT または COMPACT

  • 32 - DYNAMIC または COMPRESSED

6CREATE TABLE または ALTER TABLEDATA DIRECTORY オプションが使用された場合、このビットが設定されます。デフォルトのデータディレクトリ (datadir) 以外のディレクトリに置かれた file-per-table テーブルスペースに、このビットが設定されます。これらのテーブルについては、tablename.isl ファイルは tablename.frm ファイルと同じ場所に存在します。tablename.isl ファイルには、tablename.ibd file-per-table テーブルスペースファイルへの実際のディレクトリパスが格納されます。
  • 0 - リモートの file-per-table テーブルスペースではない場合

  • 64 - リモートの file-per-table テーブルスペース


次のテーブル t1 では ROW_FORMAT=DYNAMIC を使用し、FLAG 値は 33 です。前述の表の情報に従うと、DYNAMIC 行フォーマットのテーブルでビット位置 0 が 1 に、ビット位置 5 が 32 に設定されることがわかります。これらの値は合計 33 の FLAG 値になります。

mysql> use test;
Database changed
mysql> SET GLOBAL innodb_file_format=Barracuda;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE t1 (c1 int) ROW_FORMAT=DYNAMIC;
Query OK, 0 rows affected (0.02 sec)
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE 'test/t1' \G
*************************** 1. row *************************** TABLE_ID: 89 NAME: test/t1 FLAG: 33 N_COLS: 4 SPACE: 75 FILE_FORMAT: Barracuda ROW_FORMAT: Dynamic
ZIP_PAGE_SIZE: 0
1 row in set (0.01 sec)

21.29.8 INFORMATION_SCHEMA INNODB_SYS_INDEXES テーブル

INNODB_SYS_INDEXES テーブルは、InnoDB データディクショナリの内部 SYS_INDEXES テーブル内の情報と同等の、InnoDB インデックスに関するメタデータを提供します。

関連する使用法と使用例については、セクション14.14.3「InnoDB INFORMATION_SCHEMA システムテーブル」を参照してください。

表 21.9 INNODB_SYS_INDEXES のカラム

カラム名説明
INDEX_IDインスタンス内のすべてのデータベースで一意である各インデックスの識別子。
NAMEインデックスの名前。InnoDB によって暗黙的に作成されたほとんどのインデックスには一貫した名前が付けられていますが、インデックス名は必ずしも一意ではありません。たとえば、主キーインデックスには PRIMARY、インデックスが指定されていない場合に主キーを表すインデックスには GEN_CLUST_INDEX、および外部キー制約には ID_INDFOR_IND、および REF_IND があります。
TABLE_IDインデックスに関連付けられているテーブルを表す識別子。INNODB_SYS_TABLES.TABLE_ID の値と同じです。
TYPEインデックスの種類を示す数値識別子。0 = セカンダリインデックス、1 = クラスタ化されたインデックス、2 = 一意インデックス、3 = プライマリインデックス、32 = 全文インデックスです。
N_FIELDSインデックスキーのカラムの数。GEN_CLUST_INDEX インデックスの場合、実際のテーブルカラムではなく人為的な値を使用してインデックスが作成されているので、この値は 0 です。
PAGE_NOインデックス B ツリーのルートページ番号。全文インデックスの場合、複数の B ツリー (補助テーブル) でレイアウトされているので、PAGE_NO フィールドは未使用で、-1 (FIL_NULL) に設定されます。
SPACEインデックスが存在するテーブルスペースの識別子。0 は InnoDBシステムテーブルスペースを示します。ほかの数値はすべて、個別の .ibd ファイルを使用して file-per-table モードで作成されたテーブルを表します。この識別子は、TRUNCATE TABLE ステートメントのあとでも同じままです。テーブルのすべてのインデックスが、テーブルと同じテーブルスペースに存在するので、この値は必ずしも一意にはなりません。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES WHERE TABLE_ID = 74 \G
*************************** 1. row ***************************
INDEX_ID: 116 NAME: GEN_CLUST_INDEX
TABLE_ID: 74 TYPE: 1
N_FIELDS: 0 PAGE_NO: 3 SPACE: 60
*************************** 2. row ***************************
INDEX_ID: 117 NAME: i1
TABLE_ID: 74 TYPE: 0
N_FIELDS: 1 PAGE_NO: 4 SPACE: 60
2 rows in set (0.00 sec)

:

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

21.29.9 INFORMATION_SCHEMA INNODB_SYS_COLUMNS テーブル

INNODB_SYS_COLUMNS は、InnoDB データディクショナリの SYS_COLUMNS テーブルの情報と同等の、InnoDB テーブルカラムに関するメタデータを提供します。

関連する使用法と使用例については、セクション14.14.3「InnoDB INFORMATION_SCHEMA システムテーブル」を参照してください。

表 21.10 INNODB_SYS_COLUMNS のカラム

カラム名説明
TABLE_IDカラムに関連付けられているテーブルを表す識別子。INNODB_SYS_TABLES.TABLE_ID の値と同じです。
NAME各テーブルのそれぞれのカラムの名前。これらの名前の大文字/小文字は、lower_case_table_names 設定に応じて異なります。カラムの特別なシステム予約名はありません。
POS0 から始まり連続的に増加する、テーブル内のカラムの順序位置。あるカラムを削除すると、順序に欠落ができないように残りのカラムの順序が変更されます。
MTYPEメインの型を表します。カラム型の数値識別子。1 = VARCHAR、2 = CHAR、3 = FIXBINARY、4 = BINARY、5 = BLOB、6 = INT、7 = SYS_CHILD、8 = SYS、9 = FLOAT、10 = DOUBLE、11 = DECIMAL、12 = VARMYSQL、13 = MYSQL です。
PRTYPEInnoDB正確な型。MySQL データ型、文字セット、および NULL 可能性を表すビットを含むバイナリ値です。
LENカラム長。たとえば INT には 4、BIGINT には 8 です。マルチバイト文字セットの文字カラムの場合、この長さ値は、VARCHAR(N) などの定義を表すために必要なバイト単位の最大長です。つまり、文字エンコーディングに応じて、2*N3*N などになります。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS where TABLE_ID = 71 \G
*************************** 1. row ***************************
TABLE_ID: 71 NAME: col1 POS: 0 MTYPE: 6 PRTYPE: 1027 LEN: 4
*************************** 2. row ***************************
TABLE_ID: 71 NAME: col2 POS: 1 MTYPE: 2 PRTYPE: 524542 LEN: 10
*************************** 3. row ***************************
TABLE_ID: 71 NAME: col3 POS: 2 MTYPE: 1 PRTYPE: 524303 LEN: 10
3 rows in set (0.00 sec)

:

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

21.29.10 INFORMATION_SCHEMA INNODB_SYS_FIELDS テーブル

INNODB_SYS_FIELDS テーブルは、InnoDB データディクショナリの SYS_FIELDS テーブルの情報と同等の、InnoDB インデックスのキーカラム (フィールド) に関するメタデータを提供します。

関連する使用法と使用例については、セクション14.14.3「InnoDB INFORMATION_SCHEMA システムテーブル」を参照してください。

表 21.11 INNODB_SYS_FIELDS のカラム

カラム名説明
INDEX_IDこのキーフィールドに関連付けられたインデックスの識別子。INNODB_SYS_INDEXES.INDEX_ID と同じ値を使用します。
NAMEテーブルの元のカラム名。INNODB_SYS_COLUMNS.NAME と同じ値を使用します。
POS0 から始まり連続的に増加する、インデックス内のキーフィールドの順序位置。あるカラムを削除すると、順序に欠落ができないように残りのカラムの順序が変更されます。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS where INDEX_ID = 117 \G
*************************** 1. row ***************************
INDEX_ID: 117 NAME: col1 POS: 0
1 row in set (0.00 sec)

:

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

21.29.11 INFORMATION_SCHEMA INNODB_SYS_FOREIGN テーブル

INNODB_SYS_FOREIGN テーブルは、InnoDB データディクショナリの SYS_FOREIGN テーブルの情報と同等の、InnoDB外部キーに関するメタデータを提供します。

関連する使用法と使用例については、セクション14.14.3「InnoDB INFORMATION_SCHEMA システムテーブル」を参照してください。

表 21.12 INNODB_SYS_FOREIGN のカラム

カラム名説明
ID外部キーインデックスの名前 (数値以外)。test/products_fk のように、データベース名が前に付けられます。
FOR_NAMEこの外部キー関係の子テーブルの名前。
REF_NAMEこの外部キー関係の親テーブルの名前。
N_COLS外部キーインデックスのカラム数。
TYPE外部キーカラム ORed に関する情報を伴うビットフラグの集まり。1 = ON DELETE CASCADE、2 = ON UPDATE SET NULL、4 = ON UPDATE CASCADE、8 = ON UPDATE SET NULL、16 = ON DELETE NO ACTION、32 = ON UPDATE NO ACTION です。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN \G
*************************** 1. row *************************** ID: test/fk1
FOR_NAME: test/child
REF_NAME: test/parent N_COLS: 1 TYPE: 1
1 row in set (0.00 sec)

:

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

21.29.12 INFORMATION_SCHEMA INNODB_SYS_FOREIGN_COLS テーブル

INNODB_SYS_FOREIGN_COLS テーブルは、InnoDB データディクショナリ内の SYS_FOREIGN_COLS テーブルの情報と同等の、InnoDB 外部キーのカラムに関するステータス情報を提供します。

関連する使用法と使用例については、セクション14.14.3「InnoDB INFORMATION_SCHEMA システムテーブル」を参照してください。

表 21.13 INNODB_SYS_FOREIGN_COLS のカラム

カラム名説明
IDこのインデックスキーフィールドに関連付けられた外部キーインデックス。INNODB_SYS_FOREIGN.ID と同じ値を使用します。
FOR_COL_NAME子テーブルに関連付けられたカラムの名前。
REF_COL_NAME親テーブルに関連付けられたカラムの名前。
POS0 から始まる、外部キーインデックス内のこのキーフィールドの順序位置。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS WHERE ID = 'test/fk1' \G
*************************** 1. row *************************** ID: test/fk1
FOR_COL_NAME: parent_id
REF_COL_NAME: id POS: 0
1 row in set (0.00 sec)

:

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

21.29.13 INFORMATION_SCHEMA INNODB_SYS_TABLESTATS ビュー

INNODB_SYS_TABLESTATS は、InnoDB テーブルに関する低レベルのステータス情報のビューを提供します。このデータは、InnoDB テーブルのクエリー時に使用するインデックスを計算するために MySQL オプティマイザによって使用されます。この情報は、ディスクに格納されるデータに従うのではなく、インメモリーデータ構造から派生されます。対応する内部 InnoDB システムテーブルはありません。

InnoDB テーブルは、最後にサーバーを再起動してから開かれており、テーブルキャッシュから削除されていない場合、このビューに表示されます。永続的統計を利用できるテーブルは、このビューに常に表示されます。

関連する使用法と使用例については、セクション14.14.3「InnoDB INFORMATION_SCHEMA システムテーブル」を参照してください。

表 21.14 INNODB_SYS_TABLESTATS のカラム

カラム名説明
TABLE_ID統計を利用できるテーブルを表す識別子。INNODB_SYS_TABLES.TABLE_ID と同じ値を使用します。
NAMEテーブルの名前。INNODB_SYS_TABLES.NAME と同じ値を使用します。
STATS_INITIALIZED値は、統計がすでに収集されている場合は Initialized で、収集されていない場合は Uninitialized です。
NUM_ROWS現在の推定されるテーブル内の行数。それぞれの DML 操作後に更新されます。コミットされていないトランザクションがテーブルに挿入されたり、テーブルから削除されたりする場合、正確ではなくなることがあります。
CLUST_INDEX_SIZEクラスタ化されたインデックスを格納するディスク上のページ数。主キー順に InnoDB テーブルデータを保持します。この値は、テーブルの統計がまだ収集されていない場合は NULL になることがあります。
OTHER_INDEX_SIZEテーブルに関するすべてのセカンダリインデックスを格納する、ディスク上のページの数。この値は、テーブルの統計がまだ収集されていない場合は NULL になることがあります。
MODIFIED_COUNTERINSERTUPDATEDELETE などの DML 操作と外部キーのカスケード操作によって変更された行の数。このカラムは、テーブル統計が再計算されるごとにリセットされます。
AUTOINCすべての自動インクリメントベースの操作で発行される次の番号。AUTOINC 値の変更ペースは、自動インクリメント番号が要求された回数と、要求ごとに認められる番号の数に応じて異なります。
REF_COUNTこのカウンタがゼロになると、テーブルメタデータをテーブルキャッシュから削除できます。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS where TABLE_ID = 71 \G
*************************** 1. row *************************** TABLE_ID: 71 NAME: test/t1
STATS_INITIALIZED: Initialized NUM_ROWS: 1 CLUST_INDEX_SIZE: 1 OTHER_INDEX_SIZE: 0 MODIFIED_COUNTER: 1 AUTOINC: 0 REF_COUNT: 1
1 row in set (0.00 sec)

:

  • このテーブルは、主に、専門家レベルのパフォーマンスモニタリングや、MySQL のパフォーマンス関連の拡張を開発するときに役立ちます。

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

21.29.14 INFORMATION_SCHEMA INNODB_SYS_DATAFILES テーブル

INNODB_SYS_DATAFILES テーブルは、InnoDB データディクショナリの SYS_DATAFILES テーブル内の情報と同等の、InnoDB テーブルスペースのデータファイルパス情報を提供します。

関連する使用法と使用例については、セクション14.14.3「InnoDB INFORMATION_SCHEMA システムテーブル」を参照してください。

表 21.15 INNODB_SYS_DATAFILES のカラム

カラム名説明
SPACEテーブルスペースのスペース ID。
PATHテーブルスペースデータファイルパス (たとえば .\world\innodb\city.ibd)。CREATE TABLE ステートメントの DATA DIRECTORY 句を使用して、file-per-table テーブルスペースを MySQL データディレクトリ外の場所に作成した場合、テーブルスペース PATH フィールドには完全修飾ディレクトリパスが表示されます。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_DATAFILES WHERE SPACE = 57 \G
*************************** 1. row ***************************
SPACE: 57 PATH: ./test/t1.ibd
1 row in set (0.01 sec)

:

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

21.29.15 INFORMATION_SCHEMA INNODB_SYS_TABLESPACES テーブル

INNODB_SYS_TABLESPACES テーブルは、InnoDB データディクショナリの SYS_TABLESPACES テーブル内の情報と同等の、InnoDB テーブルスペースに関するメタデータを提供します。

関連する使用法と使用例については、セクション14.14.3「InnoDB INFORMATION_SCHEMA システムテーブル」を参照してください。

表 21.16 INNODB_SYS_TABLESPACES のカラム

カラム名説明
SPACEテーブルスペースのスペース ID。
NAMEデータベースおよびテーブル名 (たとえば world_innodb\city)
FLAGこの値は、テーブルスペースの形式とストレージ特性に関するビットレベルの情報を提供します。
FILE_FORMATテーブルスペースファイル形式 (たとえば AntelopeBarracuda)。このフィールドのデータは、.ibd ファイル内に存在するテーブルスペースフラグ情報から解釈されます。InnoDB ファイル形式の詳細は、セクション14.8「InnoDB のファイル形式管理」を参照してください。
ROW_FORMATテーブルスペースの行フォーマット (Compact または Redundant、Dynamic、Compressed)。このフィールドのデータは、.ibd ファイル内に存在するテーブルスペースフラグ情報から解釈されます。
PAGE_SIZEテーブルスペースのページサイズ。このフィールドのデータは、.ibd ファイル内に存在するテーブルスペースフラグ情報から解釈されます。
ZIP_PAGE_SIZEテーブルスペースの Zip ページサイズ。このフィールドのデータは、.ibd ファイル内に存在するテーブルスペースフラグ情報から解釈されます。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE SPACE = 57 \G
*************************** 1. row *************************** SPACE: 57 NAME: test/t1 FLAG: 0 FILE_FORMAT: Antelope ROW_FORMAT: Compact or Redundant PAGE_SIZE: 16384
ZIP_PAGE_SIZE: 0
1 row in set (0.00 sec)

:

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

  • すべての Antelope ファイル形式のテーブルスペースフラグは (テーブルフラグとは異なり) 常にゼロなので、テーブルスペースの行フォーマットが Redundant または Compact であるかをこのフラグ整数から判断することはできません。この結果、ROW_FORMAT フィールドに指定可能な値は、Compact または RedundantCompressedDynamic になります。

INNODB_SYS_TABLESPACES.FLAG カラム値の解釈:

INNODB_SYS_TABLESPACES.FLAG カラムは、テーブルスペースの形式およびストレージ特性に関するビットレベルの情報を提供します。

MySQL 5.6 までは、テーブルフラグとテーブルスペースフラグはビット位置 0 の設定を除き同じでした。MySQL 5.6 では、論理ページサイズを保持するために追加の 4 ビットを必要とする、4K および 8K ページのサポートが追加されました。MySQL 5.6 ではまた、CREATE TABLE および ALTER TABLEDATA DIRECTORY 句のサポートが追加され、MySQL データディレクトリ外の場所に file-per-table テーブルスペースを格納できるようになりました。この機能には、テーブルフラグとテーブルスペースフラグの両方に追加ビットが必要でしたが、位置は同じではありません。

次の表に示された該当する 10 進数値を一緒に付加すると、テーブルスペース FLAG カラム値を解釈できます。

表 21.17 INNODB_SYS_TABLESPACES FLAG カラムデータを解釈するためのビット位置値

ビット位置説明10 進数値
0テーブルスペース内のテーブルの行フォーマットが DYNAMIC または COMPRESSED の場合、このビットが設定されます。この情報を使用して、Antelope ファイル形式と Barracuda ファイル形式を区別できますが、REDUNDANT ファイル形式と COMPACT ファイル形式は区別できません (DYNAMIC 行フォーマットと COMPRESSED 行フォーマットには Barracuda ファイル形式が必要です)。file-per-table テーブルスペースである場合、INNODB_SYS_TABLES をクエリーして、2 つの Antelope 行フォーマット (REDUNDANT または COMPACT) のどちらが使用されているかを判断する必要があります。
  • 0 - REDUNDANT または COMPACT (FILE_FORMAT=Antelope)

  • 1 - DYNAMIC または COMPRESSED (FILE_FORMAT=Barracuda)

1-4これらの 4 つのビットには、テーブルスペースの圧縮されたページサイズ (KEY_BLOCK_SIZE または物理的なブロックサイズ) を表す小さな数字が含まれます。
  • 0 - 圧縮なし

  • 2 - 1024 バイトの圧縮ページサイズ

  • 4 - 2048 バイトの圧縮ページサイズ

  • 6 - 4096 バイトの圧縮ページサイズ

  • 8 - 8192 バイトの圧縮ページサイズ

  • 10 - 16384 バイトの圧縮ページサイズ

5テーブルの行フォーマットが DYNAMIC または COMPRESSED である場合に、file-per-table テーブルスペースにこのビットが設定されます。
  • 0 - REDUNDANT または COMPACT

  • 32 - DYNAMIC または COMPRESSED

6-9これらの 4 つのビットには、テーブルスペースの圧縮解除されたページサイズ (論理ページサイズ) を表す小さな数字が含まれます。論理ページサイズが 16K の元の InnoDB デフォルトページサイズである場合、この設定はゼロです。
  • 192 - 4096 バイトの論理/非圧縮ページサイズ

  • 256 - 8192 バイトの論理/非圧縮ページサイズ

  • 0 - 16384 バイトの論理/非圧縮ページサイズ

10CREATE TABLE または ALTER TABLEDATA DIRECTORY オプションが使用された場合、このビットが設定されます。デフォルトのデータディレクトリ (datadir) 以外のディレクトリに置かれた file-per-table テーブルスペースに、このビットが設定されます。これらのテーブルについては、tablename.isl ファイルは tablename.frm ファイルと同じ場所に存在します。tablename.isl ファイルには、tablename.ibd file-per-table テーブルスペースファイルへの実際のディレクトリパスが格納されます。
  • 0 - リモートの file-per-table テーブルスペースではない場合

  • 1024 - リモートの file-per-table テーブルスペース


次の例では、テーブル t1innodb_file_per_table=ON で作成されます。これはテーブル t1 を独自のテーブルスペース内に作成します。INNODB_SYS_TABLESPACES をクエリーすると、テーブルスペースの FLAG 値が 33 であることがわかります。どのようにこの値になるかを判断するには、前述の表に記されているビット値を参照してください。テーブル t1DYNAMIC 行フォーマットを使用するので、ビット 0 は 1 の値になります。テーブルスペースが DYNAMIC 行フォーマットを使用する file-per-table テーブルスペースなので、ビット 5 は 32 の値になります。innodb_page_size はデフォルトの 16K 値に設定されているので、ビット位置 6-9 は 0 です。ほかのビット値は適用できないため 0 に設定されます。ビット位置 0 とビット位置 5 の値は合計して 33 の FLAG 値になります。

mysql> use test;
Database changed
mysql> SHOW VARIABLES LIKE 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'innodb_page_size';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec)
mysql> SET GLOBAL innodb_file_format=Barracuda;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE t1 (c1 int) ROW_FORMAT=DYNAMIC;
Query OK, 0 rows affected (0.02 sec)
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME LIKE 'test/t1' \G
*************************** 1. row *************************** SPACE: 75 NAME: test/t1 FLAG: 33 FILE_FORMAT: Barracuda ROW_FORMAT: Dynamic PAGE_SIZE: 16384
ZIP_PAGE_SIZE: 0
1 row in set (0.00 sec)

21.29.16 INFORMATION_SCHEMA INNODB_BUFFER_PAGE テーブル

INNODB_BUFFER_PAGE テーブルは、各ページに関する情報を、InnoDBバッファープールに保持します。

関連する使用法と使用例については、セクション14.14.5「InnoDB INFORMATION_SCHEMA バッファープールテーブル」を参照してください。

警告

INNODB_BUFFER_PAGE テーブルをクエリーすると、大幅なパフォーマンスのオーバーヘッドが生じる可能性があります。クエリーによって発生する可能性のあるパフォーマンスへの影響を認識し、かつそれが許容可能であると判断されていないかぎり、本番システムではこのテーブルをクエリーしないでください。パフォーマンスへの影響を避けるには、調べる問題をテストインスタンスに再現し、テストインスタンスの INNODB_BUFFER_PAGE テーブルをクエリーします。

表 21.18 INNODB_BUFFER_PAGE のカラム

カラム名説明
POOL_IDバッファープール ID。複数のバッファープールインスタンスを区別する識別子。
BLOCK_IDバッファープールブロック ID。
SPACEテーブルスペース ID。INNODB_SYS_TABLES.SPACE と同じ値を使用します。
PAGE_NUMBERページ番号。
PAGE_TYPEページタイプ。ALLOCATED (新しく割り当てられたページ)、INDEX (B ツリーノード)、UNDO_LOG (Undo ログページ)、INODE (インデックスノード)、IBUF_FREE_LIST (挿入バッファー空きリスト)、IBUF_BITMAP (挿入バッファービットマップ)、SYSTEM (システムページ)、TRX_SYSTEM (トランザクションシステムデータ)、FILE_SPACE_HEADER (ファイル領域ヘッダー)、EXTENT_DESCRIPTOR (エクステントディスクリプタページ)、BLOB (非圧縮 BLOB ページ)、COMPRESSED_BLOB (最初の圧縮 BLOB ページ)、COMPRESSED_BLOB2 (後続の圧縮 BLOB ページ)、IBUF_INDEX (挿入バッファーインデックス)、UNKNOWN (不明) のいずれかです。
FLUSH_TYPEフラッシュタイプ。
FIX_COUNTバッファープール内でこのブロックを使用するスレッドの数。ゼロのとき、ブロックは削除対象です。
IS_HASHEDハッシュインデックスがこのページ上に構築されているかどうか。
NEWEST_MODIFICATIONもっとも新しい変更のログシーケンス番号。
OLDEST_MODIFICATIONもっとも古い変更のログシーケンス番号。
ACCESS_TIMEページの最初のアクセス時間の判断に使用される無名数。
TABLE_NAMEページが属しているテーブルの名前。このカラムは、タイプ INDEX のページにのみ適用可能です。
INDEX_NAMEページが属しているインデックスの名前。これは、クラスタ化されたインデックスの名前にもセカンダリインデックスの名前にもなります。このカラムは、タイプ INDEX のページにのみ適用可能です。
NUMBER_RECORDSページ内のレコードの数。
DATA_SIZEレコードのサイズの合計。このカラムは、タイプ INDEX のページにのみ適用可能です。
COMPRESSED_SIZE圧縮されたページサイズ。圧縮されていないページは NULL になります。
PAGE_STATEページ状態。有効なデータを伴うページの状態は、FILE_PAGE (ファイルからデータのページをバッファーします)、MEMORY (インメモリーオブジェクトからのページをバッファーします)、COMPRESSED のいずれかです。ほかの可能な (InnoDB によって管理される) 状態は NULLREADY_FOR_USENOT_USEDREMOVE_HASH です。
IO_FIXI/O がこのページに対して保留中であるかどうかを指定します。IO_NONE = 保留中の I/O なし、IO_READ = 読み取り保留中、IO_WRITE = 書き込み保留中です。
IS_OLDブロックが LRU リストの古いブロックのサブリストにあるかどうかを指定します。
FREE_PAGE_CLOCKブロックが最後に LRU リストの先頭に置かれたときの freed_page_clock カウンタの値。freed_page_clock カウンタは、LRU リストの末尾から削除されたブロックの数を追跡します。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE LIMIT 1\G
*************************** 1. row *************************** POOL_ID: 0 BLOCK_ID: 0 SPACE: 97 PAGE_NUMBER: 2473 PAGE_TYPE: INDEX FLUSH_TYPE: 1 FIX_COUNT: 0 IS_HASHED: YES
NEWEST_MODIFICATION: 733855581
OLDEST_MODIFICATION: 0 ACCESS_TIME: 3378385672 TABLE_NAME: `employees`.`salaries` INDEX_NAME: PRIMARY NUMBER_RECORDS: 468 DATA_SIZE: 14976 COMPRESSED_SIZE: 0 PAGE_STATE: FILE_PAGE IO_FIX: IO_NONE IS_OLD: YES FREE_PAGE_CLOCK: 66
1 row in set (0.03 sec)

:

  • このテーブルは、主に、専門家レベルのパフォーマンスモニタリングや、MySQL のパフォーマンス関連の拡張を開発するときに役立ちます。

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

21.29.17 INFORMATION_SCHEMA INNODB_BUFFER_PAGE_LRU テーブル

INNODB_BUFFER_PAGE_LRU テーブルは、InnoDBバッファープール内のページに関する情報、特に、いっぱいになったときにバッファープールからどのページをエビクションするかを決定する LRU リスト内の各ページの順序を保持します。

INNODB_BUFFER_PAGE_LRU テーブルには、INNODB_BUFFER_PAGE テーブルと同じカラムがありますが、INNODB_BUFFER_PAGE_LRU テーブルには BLOCK_ID カラムではなく LRU_POSITION カラムがある点が異なります。

関連する使用法と使用例については、セクション14.14.5「InnoDB INFORMATION_SCHEMA バッファープールテーブル」を参照してください。

警告

INNODB_BUFFER_PAGE_LRU テーブルをクエリーすると、大幅なパフォーマンスのオーバーヘッドが生じる可能性があります。クエリーによって発生する可能性のあるパフォーマンスへの影響を認識し、かつそれが許容可能であると判断されていないかぎり、本番システムではこのテーブルをクエリーしないでください。パフォーマンスへの影響を避けるには、調べる問題をテストインスタンスに再現し、テストインスタンスの INNODB_BUFFER_PAGE_LRU テーブルをクエリーします。

表 21.19 INNODB_BUFFER_PAGE_LRU のカラム

カラム名説明
POOL_IDバッファープール ID。複数のバッファープールインスタンスを区別する識別子。
LRU_POSITIONLRU リストでのページの位置。
SPACEテーブルスペース ID。INNODB_SYS_TABLES.SPACE と同じ値を使用します。
PAGE_NUMBERページ番号。
PAGE_TYPEページタイプ。ALLOCATED (新しく割り当てられたページ)、INDEX (B ツリーノード)、UNDO_LOG (Undo ログページ)、INODE (インデックスノード)、IBUF_FREE_LIST (挿入バッファー空きリスト)、IBUF_BITMAP (挿入バッファービットマップ)、SYSTEM (システムページ)、TRX_SYSTEM (トランザクションシステムデータ)、FILE_SPACE_HEADER (ファイル領域ヘッダー)、EXTENT_DESCRIPTOR (エクステントディスクリプタページ)、BLOB (非圧縮 BLOB ページ)、COMPRESSED_BLOB (最初の圧縮 BLOB ページ)、COMPRESSED_BLOB2 (後続の圧縮 BLOB ページ)、IBUF_INDEX (挿入バッファーインデックス)、UNKNOWN (不明) のいずれかです。
FLUSH_TYPEフラッシュタイプ。
FIX_COUNTバッファープール内でこのブロックを使用するスレッドの数。ゼロのとき、ブロックは削除対象です。
IS_HASHEDハッシュインデックスがこのページ上に構築されているかどうか。
NEWEST_MODIFICATIONもっとも新しい変更のログシーケンス番号。
OLDEST_MODIFICATIONもっとも古い変更のログシーケンス番号。
ACCESS_TIMEページの最初のアクセス時間の判断に使用される無名数。
TABLE_NAMEページが属しているテーブルの名前。このカラムは、タイプ INDEX のページにのみ適用可能です。
INDEX_NAMEページが属しているインデックスの名前。これは、クラスタ化されたインデックスの名前にもセカンダリインデックスの名前にもなります。このカラムは、タイプ INDEX のページにのみ適用可能です。
NUMBER_RECORDSページ内のレコードの数。
DATA_SIZEレコードのサイズの合計。このカラムは、タイプ INDEX のページにのみ適用可能です。
COMPRESSED_SIZE圧縮されたページサイズ。圧縮されていないページは NULL になります。
PAGE_STATEページ状態。有効なデータを伴うページの状態は、FILE_PAGE (ファイルからデータのページをバッファーします)、MEMORY (インメモリーオブジェクトからのページをバッファーします)、COMPRESSED のいずれかです。ほかの可能な (InnoDB によって管理される) 状態は NULLREADY_FOR_USENOT_USEDREMOVE_HASH です。
IO_FIXI/O がこのページに対して保留中であるかどうかを指定します。IO_NONE = 保留中の I/O なし、IO_READ = 読み取り保留中、IO_WRITE = 書き込み保留中です。
IS_OLDブロックが LRU リストの古いブロックのサブリストにあるかどうかを指定します。
FREE_PAGE_CLOCKブロックが最後に LRU リストの先頭に置かれたときの freed_page_clock カウンタの値。freed_page_clock カウンタは、LRU リストの末尾から削除されたブロックの数を追跡します。

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU LIMIT 1\G
*************************** 1. row *************************** POOL_ID: 0 LRU_POSITION: 0 SPACE: 97 PAGE_NUMBER: 1984 PAGE_TYPE: INDEX FLUSH_TYPE: 1 FIX_COUNT: 0 IS_HASHED: YES
NEWEST_MODIFICATION: 719490396
OLDEST_MODIFICATION: 0 ACCESS_TIME: 3378383796 TABLE_NAME: `employees`.`salaries` INDEX_NAME: PRIMARY NUMBER_RECORDS: 468 DATA_SIZE: 14976 COMPRESSED_SIZE: 0 COMPRESSED: NO IO_FIX: IO_NONE IS_OLD: YES FREE_PAGE_CLOCK: 0
1 row in set (0.02 sec)

メモ

  • このテーブルは、主に、専門家レベルのパフォーマンスモニタリングや、MySQL のパフォーマンス関連の拡張を開発するときに役立ちます。

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーした場合、MySQL は、バッファープール内のアクティブなページ数に 64 バイトをかけた容量以上の連続したメモリーの大きなブロックを割り当てることが必要になる可能性があります。この割り当ては、特に数 G バイトのバッファープールを持つシステムで、メモリー不足エラーを引き起こす可能性があります。

  • このテーブルをクエリーした場合、MySQLで、LRU リストのトラバース中、バッファープールを表すデータ構造をロックする必要があります。これにより、特に数 G バイトのバッファープールを持つシステムで並列性を軽減できます。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

21.29.18 INFORMATION_SCHEMA INNODB_BUFFER_POOL_STATS テーブル

INNODB_BUFFER_POOL_STATS テーブルは、SHOW ENGINE INNODB STATUS 出力で提供されるものと同じバッファープール情報の多くを提供します。同じ情報の多くは、InnoDB バッファープールのサーバーステータス変数を使用して取得することもできます。

バッファープール内のページに新しいまたは新しくないというマークを付けるという考えは、バッファープールデータ構造の先頭と末尾にあるサブリスト間にそれらを転送することを意味します。新しいとされたページは、バッファープールから削除されるまでに長い時間がかかりますが、新しくないとされたページは、エビクションの時点に近づけられます。

関連する使用法と使用例については、セクション14.14.5「InnoDB INFORMATION_SCHEMA バッファープールテーブル」を参照してください。

表 21.20 INNODB_BUFFER_POOL_STATS のカラム

カラム名説明
POOL_IDバッファープール ID。複数のバッファープールインスタンスを区別する一意の識別子。
POOL_SIZEInnoDB バッファープールのサイズ (ページ単位)。
FREE_BUFFERSInnoDB バッファープール内の空きページの数
DATABASE_PAGESデータを含む InnoDB バッファープール内のページの数。数には、ダーティーページとクリーンページの両方を含みます。
OLD_DATABASE_PAGESold バッファープールサブリスト内のページの数。
MODIFIED_DATABASE_PAGES変更された (ダーティー) データベースページの数
PENDING_DECOMPRESS圧縮解除保留中のページの数
PENDING_READS読み取り保留中の数
PENDING_FLUSH_LRULRU 内のフラッシュ保留中のページの数
PENDING_FLUSH_LISTフラッシュリスト内のフラッシュ保留中のページの数
PAGES_MADE_YOUNG新しいとされたページの数
PAGES_NOT_MADE_YOUNG新しいとされていないページの数
PAGES_MADE_YOUNG_RATE秒あたりに新しいとされたページの数 (最後の出力/経過時間以降に新しいとされたページ)
PAGES_MADE_NOT_YOUNG_RATE秒あたりに新しいとされなかったページの数 (最後の出力/経過時間以降に新しいとされなかったページ)
NUMBER_PAGES_READ読み取られたページの数
NUMBER_PAGES_CREATED作成されたページの数
NUMBER_PAGES_WRITTEN書き込まれたページの数
PAGES_READ_RATE秒あたりに読み取られたページの数 (最後の出力/経過時間以降に読み取られたページ)
PAGES_CREATE_RATE秒あたりに作成されたページの数 (最後の出力/経過時間以降に作成されたページ)
PAGES_WRITTEN_RATE秒あたりに書き込まれたページの数 (最後の出力/経過時間以降に書き込まれたページ)
NUMBER_PAGES_GET論理読み取りリクエスト数。
HIT_RATEバッファープールのヒット率
YOUNG_MAKE_PER_THOUSAND_GETS1000 の取得あたりに新しいとされたページの数
NOT_YOUNG_MAKE_PER_THOUSAND_GETS1000 の取得あたりに新しいとされていないページの数
NUMBER_PAGES_READ_AHEAD先読みされたページの数
NUMBER_READ_AHEAD_EVICTED先読みバックグラウンドスレッドによって InnoDB バッファープールに読み取られ、クエリーでアクセスされることなくその後に削除されたページの数。
READ_AHEAD_RATE秒あたりの先読み率 (最後の出力/経過時間以降に先読みされたページ)
READ_AHEAD_EVICTED_RATEアクセスなしに削除された、先読みされたページの秒あたりの数 (最後の出力/経過時間以降にアクセスされていない先読みページ)
LRU_IO_TOTALLRU IO 合計
LRU_IO_CURRENT現在の間隔の LRU IO
UNCOMPRESS_TOTAL圧縮解除されたページの合計数
UNCOMPRESS_CURRENT現在の間隔で圧縮解除されたページの数

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_POOL_STATS\G
*************************** 1. row *************************** POOL_ID: 0 POOL_SIZE: 8192 FREE_BUFFERS: 1 DATABASE_PAGES: 8085 OLD_DATABASE_PAGES: 2964 MODIFIED_DATABASE_PAGES: 0 PENDING_DECOMPRESS: 0 PENDING_READS: 0 PENDING_FLUSH_LRU: 0 PENDING_FLUSH_LIST: 0 PAGES_MADE_YOUNG: 22821 PAGES_NOT_MADE_YOUNG: 3544303 PAGES_MADE_YOUNG_RATE: 357.62602199870594 PAGES_MADE_NOT_YOUNG_RATE: 0 NUMBER_PAGES_READ: 2389 NUMBER_PAGES_CREATED: 12385 NUMBER_PAGES_WRITTEN: 13111 PAGES_READ_RATE: 0 PAGES_CREATE_RATE: 0 PAGES_WRITTEN_RATE: 0 NUMBER_PAGES_GET: 33322210 HIT_RATE: 1000 YOUNG_MAKE_PER_THOUSAND_GETS: 18
NOT_YOUNG_MAKE_PER_THOUSAND_GETS: 0 NUMBER_PAGES_READ_AHEAD: 2024 NUMBER_READ_AHEAD_EVICTED: 0 READ_AHEAD_RATE: 0 READ_AHEAD_EVICTED_RATE: 0 LRU_IO_TOTAL: 0 LRU_IO_CURRENT: 0 UNCOMPRESS_TOTAL: 0 UNCOMPRESS_CURRENT: 0
1 row in set (0.00 sec)

:

  • このテーブルは、主に、専門家レベルのパフォーマンスモニタリングや、MySQL のパフォーマンス関連の拡張を開発するときに役立ちます。

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

21.29.19 INFORMATION_SCHEMA INNODB_METRICS テーブル

この INFORMATION_SCHEMA テーブルは、さまざまな InnoDB パフォーマンス情報を表し、InnoDBPERFORMANCE_SCHEMA テーブルの特定のフォーカス領域を補完します。単純なクエリーで、システムのヘルス全体を確認できます。より詳細なクエリーを使用すると、パフォーマンスのボトルネック、リソース不足、アプリケーション問題などの問題を診断できます。

各モニターは、カウンタ情報を収集するようにインストゥルメントされる InnoDB ソースコード内でのポイントを表します。各カウンタは、開始、停止、およびリセットできます。共通のモジュール名を使用して、カウンタのグループに対して、これらのアクションを実行することもできます。

デフォルトでは、比較的少量のデータが収集されます。カウンタを開始、停止、およびリセットするには、カウンタの名前、モジュールの名前、%文字を使用した名前などのワイルドカード一致、特殊キーワード all を使用して、innodb_monitor_enableinnodb_monitor_disableinnodb_monitor_reset、または innodb_monitor_reset_all のいずれかの構成オプションを設定します。

使用法については、セクション14.14.6「InnoDB INFORMATION_SCHEMA メトリックテーブル」を参照してください。

表 21.21 INNODB_METRICS のカラム

カラム名説明
NAMEカウンタの一意の名前。
SUBSYSTEMメトリックが適用される InnoDB の側面。SET GLOBAL 構文で使用する対応するモジュール名については、表に続くリストを参照してください。
COUNTカウンタが有効になってからの値。
MAX_COUNTカウンタが有効になってからの最大値。
MIN_COUNTカウンタが有効になってからの最小値。
AVG_COUNTカウンタが有効になってからの平均値。
COUNT_RESET最後にリセットされてからのカウンタ値。(_RESET フィールドは、ストップウォッチのラップカウンタのように機能します。一定の時間間隔中のアクティビティーを測定できますが、累積数値は COUNTMAX_COUNT などのフィールドで引き続き使用できます。)
MAX_COUNT_RESET最後にリセットされてからの最大カウンタ値。
MIN_COUNT_RESET最後にリセットされてからの最小カウンタ値。
AVG_COUNT_RESET最後にリセットされてからの平均カウンタ値。
TIME_ENABLED最後の開始時のタイムスタンプ。
TIME_DISABLED最後の停止時のタイムスタンプ。
TIME_ELAPSEDカウンタが開始してからの経過時間 (秒単位)。
TIME_RESET最後の停止時のタイムスタンプ。
STATUSカウンタがまだ実行中であるのか ()、または停止しているのか ()。
TYPE項目が累積カウンタであるのか、または一部のリソースの現在値を測定しているのか。
COMMENTカウンタの説明。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME="dml_inserts"\G
*************************** 1. row *************************** NAME: dml_inserts SUBSYSTEM: dml COUNT: 3 MAX_COUNT: 3 MIN_COUNT: NULL AVG_COUNT: 0.046153846153846156 COUNT_RESET: 3
MAX_COUNT_RESET: 3
MIN_COUNT_RESET: NULL
AVG_COUNT_RESET: NULL TIME_ENABLED: 2014-12-04 14:18:28 TIME_DISABLED: NULL TIME_ELAPSED: 65 TIME_RESET: NULL STATUS: enabled TYPE: status_counter COMMENT: Number of rows inserted
1 row in set (0.00 sec)

:

  • このテーブルをクエリーするには PROCESS 権限が必要です。

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

21.29.20 INFORMATION_SCHEMA INNODB_FT_CONFIG テーブル

INNODB_FT_CONFIG テーブルは、FULLTEXT インデックスに関するメタデータと、InnoDB テーブルに関連する処理を表示します。

このテーブルをクエリーする前に、構成変数 innodb_ft_aux_table を、test/articles など、FULLTEXT インデックスを含むテーブルの名前 (データベース名など) に設定します。

関連する使用法と使用例については、セクション14.14.4「InnoDB INFORMATION_SCHEMA FULLTEXT インデックステーブル」を参照してください。

表 21.22 INNODB_FT_CONFIG のカラム

カラム名説明
KEYFULLTEXT インデックスを含んだ InnoDB テーブルのメタデータの項目を指定する名前。
VALUEInnoDB テーブルの FULLTEXT インデックスの側面に対する一部の制限または現在値を反映した、KEY カラムに関連付けられた値。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_CONFIG;
+---------------------------+-------------------+
| KEY | VALUE |
+---------------------------+-------------------+
| optimize_checkpoint_limit | 180 |
| synced_doc_id | 0 |
| stopword_table_name | test/my_stopwords |
| use_stopword | 1 |
+---------------------------+-------------------+
4 rows in set (0.00 sec)

:

  • この表では、内部構成のみが対象になります。統計情報の使用は想定されていません。

  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

  • KEY カラムの値は、InnoDB 全文処理のパフォーマンスチューニングおよびデバッグの必要性に応じて異なる場合があります。現在、キー値は次のものがあります。

    • optimize_checkpoint_limit: OPTIMIZE TABLE の実行が停止するまでの秒数です。

    • synced_doc_id: 次に発行される DOC_ID です。

    • stopword_table_name: ユーザー定義のストップワードテーブルに対する database/table の名前です。ユーザー定義のストップワードテーブルがない場合、このフィールドは空です。

    • use_stopword: ストップワードテーブルを使用するかどうかを示します。これは、FULLTEXT インデックスの作成時に定義されます。

  • InnoDBFULLTEXT 検索の詳細は、セクション14.2.13.3「FULLTEXT インデックス」およびセクション12.9「全文検索関数」を参照してください。

21.29.21 INFORMATION_SCHEMA INNODB_FT_DEFAULT_STOPWORD テーブル

INNODB_FT_DEFAULT_STOPWORD テーブルは、InnoDB テーブルでの FULLTEXT インデックスの作成時にデフォルトで使用されるストップワードのリストを保持します。デフォルトの InnoDB ストップワードリストに関する情報と、自身のストップワードリストの定義方法については、セクション12.9.4「全文ストップワード」を参照してください。

関連する使用法と使用例については、セクション14.14.4「InnoDB INFORMATION_SCHEMA FULLTEXT インデックステーブル」を参照してください。

表 21.23 INNODB_FT_DEFAULT_STOPWORD のカラム

カラム名説明
valueInnoDB テーブルで FULLTEXT インデックスのストップワードとしてデフォルトで使用される単語。innodb_ft_server_stopword_table または innodb_ft_user_stopword_table オプションのどちらかを使用してデフォルトのストップワード処理をオーバーライドする場合は使用されません。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD;
+-------+
| value |
+-------+
| a |
| about |
| an |
| are |
| as |
| at |
| be |
| by |
| com |
| de |
| en |
| for |
| from |
| how |
| i |
| in |
| is |
| it |
| la |
| of |
| on |
| or |
| that |
| the |
| this |
| to |
| was |
| what |
| when |
| where |
| who |
| will |
| with |
| und |
| the |
| www |
+-------+
36 rows in set (0.00 sec)

:

21.29.22 INFORMATION_SCHEMA INNODB_FT_INDEX_TABLE テーブル

INNODB_FT_INDEX_TABLE テーブルには、InnoDB テーブルの FULLTEXT インデックスに対してテキスト検索を処理するために使用される、転置インデックスに関する情報が表示されます。

このテーブルをクエリーする前に、構成変数 innodb_ft_aux_table を、test/articles など、FULLTEXT インデックスを含むテーブルの名前 (データベース名など) に設定します。

関連する使用法と使用例については、セクション14.14.4「InnoDB INFORMATION_SCHEMA FULLTEXT インデックステーブル」を参照してください。

表 21.24 INNODB_FT_INDEX_TABLE のカラム

カラム名説明
WORDFULLTEXT の一部であるカラムのテキストから抽出された単語。
FIRST_DOC_IDFULLTEXT インデックスでこの単語が最初に表示されるドキュメント ID。
LAST_DOC_IDFULLTEXT インデックスでこの単語が最後に表示されるドキュメント ID。
DOC_COUNTFULLTEXT インデックスでこの単語が表示される行の数。同じ単語は、DOC_ID 値と POSITION 値の組み合わせごとに一度ずつ、キャッシュテーブル内で複数回現れる可能性があります。
DOC_ID単語を含む行のドキュメント ID。この値は、ベースとなるテーブルに対して定義した ID カラムの値を反映することも、テーブルに適切なカラムが含まれないときに InnoDB によって生成されたシーケンス値にすることもできます。
POSITIONDOC_ID 値で識別された関連ドキュメント内のこの単語の特定のインスタンス位置。

:

  • このテーブルは最初から、構成変数 innodb_ft_aux_table の値を設定するまで空です。次の例は、innodb_ft_aux_table オプションを使用して、指定されたテーブルの FULLTEXT インデックスに関する情報を表示する方法について説明します。新しく挿入された行の情報が INNODB_FT_INDEX_TABLE に表示される前に、FULLTEXT インデックスキャッシュは、ディスクにフラッシュされる必要があります。これは、innodb_optimize_fulltext_only=ON でインデックスのついたテーブルで OPTIMIZE TABLE 操作により実行されます。

    mysql> use test;
    mysql> CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), body TEXT, FULLTEXT (title,body) ) ENGINE=InnoDB;
    mysql> INSERT INTO articles (title,body) VALUES ('MySQL Tutorial','DBMS stands for DataBase ...'), ('How To Use MySQL Well','After you went through a ...'), ('Optimizing MySQL','In this tutorial we will show ...'), ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'), ('MySQL vs. YourSQL','In the following database comparison ...'), ('MySQL Security','When configured properly, MySQL ...');
    mysql> SET GLOBAL innodb_optimize_fulltext_only=ON;
    Query OK, 0 rows affected (0.00 sec)
    mysql> OPTIMIZE TABLE articles;
    +---------------+----------+----------+----------+
    | Table | Op | Msg_type | Msg_text |
    +---------------+----------+----------+----------+
    | test.articles | optimize | status | OK |
    +---------------+----------+----------+----------+
    1 row in set (0.00 sec)
    mysql> SET GLOBAL innodb_ft_aux_table = 'test/articles';
    Query OK, 0 rows affected (0.00 sec)
    mysql> USE INFORMATION_SCHEMA;
    mysql> SELECT word, doc_count, doc_id, position FROM INNODB_FT_INDEX_TABLE LIMIT 5;
    +------------+-----------+--------+----------+
    | word | doc_count | doc_id | position |
    +------------+-----------+--------+----------+
    | 1001 | 1 | 4 | 0 |
    | after | 1 | 2 | 22 |
    | comparison | 1 | 5 | 44 |
    | configured | 1 | 6 | 20 |
    | database | 2 | 1 | 31 |
    +------------+-----------+--------+----------+
    5 rows in set (0.01 sec) 
  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

  • InnoDBFULLTEXT 検索の詳細は、セクション14.2.13.3「FULLTEXT インデックス」およびセクション12.9「全文検索関数」を参照してください。

21.29.23 INFORMATION_SCHEMA INNODB_FT_INDEX_CACHE テーブル

INNODB_FT_INDEX_CACHE: FULLTEXT インデックス内の新しく挿入された行に関するトークン情報が含まれています。DML 操作中の負荷の大きなインデックスの再編成を避けるために、新しくインデックスが付けられた単語に関する情報は個別に格納され、OPTIMIZE TABLE の実行時、サーバーのシャットダウン時、またはキャッシュサイズが innodb_ft_cache_sizeinnodb_ft_total_cache_size で定義された制限を超えたときにのみ、メインの検索インデックスと組み合わされます。

このテーブルをクエリーする前に、構成変数 innodb_ft_aux_table を、test/articles など、FULLTEXT インデックスを含むテーブルの名前 (データベース名など) に設定します。

関連する使用法と使用例については、セクション14.14.4「InnoDB INFORMATION_SCHEMA FULLTEXT インデックステーブル」を参照してください。

表 21.25 INNODB_FT_INDEX_CACHE のカラム

カラム名説明
WORD新しく挿入された行のテキストから抽出された単語。
FIRST_DOC_IDFULLTEXT インデックスでこの単語が最初に表示されるドキュメント ID。
LAST_DOC_IDFULLTEXT インデックスでこの単語が最後に表示されるドキュメント ID。
DOC_COUNTFULLTEXT インデックスでこの単語が表示される行の数。同じ単語は、DOC_ID 値と POSITION 値の組み合わせごとに一度ずつ、キャッシュテーブル内で複数回現れる可能性があります。
DOC_ID新しく挿入された行のドキュメント ID。この値は、ベースとなるテーブルに対して定義した ID カラムの値を反映することも、テーブルに適切なカラムが含まれないときに InnoDB によって生成されたシーケンス値にすることもできます。
POSITIONDOC_ID 値で識別された関連ドキュメント内のこの単語の特定のインスタンス位置。値は絶対位置を表しません。その単語の 1 つ前のインスタンスの POSITION に追加されたオフセットです。

:

  • このテーブルは最初から、構成変数 innodb_ft_aux_table の値を設定するまで空です。次の例は、innodb_ft_aux_table オプションを使用して、指定されたテーブルの FULLTEXT インデックスに関する情報を表示する方法について説明します。

    mysql> USE test;
    mysql> CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), body TEXT, FULLTEXT (title,body) ) ENGINE=InnoDB;
    mysql> INSERT INTO articles (title,body) VALUES ('MySQL Tutorial','DBMS stands for DataBase ...'), ('How To Use MySQL Well','After you went through a ...'), ('Optimizing MySQL','In this tutorial we will show ...'), ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'), ('MySQL vs. YourSQL','In the following database comparison ...'), ('MySQL Security','When configured properly, MySQL ...');
    mysql> SET GLOBAL innodb_ft_aux_table = 'test/articles';
    Query OK, 0 rows affected (0.00 sec)
    mysql> USE INFORMATION_SCHEMA;
    mysql> SELECT word, doc_count, doc_id, position FROM INNODB_FT_INDEX_CACHE LIMIT 5;
    +------------+-----------+--------+----------+
    | word | doc_count | doc_id | position |
    +------------+-----------+--------+----------+
    | 1001 | 1 | 4 | 0 |
    | after | 1 | 2 | 22 |
    | comparison | 1 | 5 | 44 |
    | configured | 1 | 6 | 20 |
    | database | 2 | 1 | 31 |
    +------------+-----------+--------+----------+
    5 rows in set (0.00 sec) 
  • DESCRIBE または SHOW COLUMNS を使用して、データ型とデフォルト値を含む、このテーブルのカラムに関する追加情報を表示します。

  • このテーブルをクエリーするには PROCESS 権限が必要です。

  • InnoDBFULLTEXT 検索の詳細は、セクション14.2.13.3「FULLTEXT インデックス」およびセクション12.9「全文検索関数」を参照してください。

21.29.24 INFORMATION_SCHEMA INNODB_FT_DELETED テーブル

INNODB_FT_DELETED テーブルは、InnoDB テーブルの FULLTEXT インデックスから削除された行を記録します。InnoDBFULLTEXT インデックスに対する DML 操作中の負荷の大きなインデックスの再編成を避けるために、新しく削除された単語に関する情報は個別に格納され、テキスト検索を行うときに検索結果からフィルタで除去されて、InnoDB テーブルの OPTIMIZE TABLE ステートメントを発行するときにのみメインの検索インデックスから削除されます。詳細は、InnoDB 全文インデックスの最適化を参照してください。

このテーブルは最初から、構成変数 innodb_ft_aux_table の値を、test/articles など、FULLTEXT インデックスを含むテーブルの名前 (データベース名を含む) に設定するまで空です。

関連する使用法と使用例については、セクション14.14.4「InnoDB INFORMATION_SCHEMA FULLTEXT インデックステーブル」を参照してください。

表 21.26 INNODB_FT_DELETED のカラム

カラム名説明
DOC_ID新たに削除された行のドキュメント ID。この値は、ベースとなるテーブルに対して定義した ID カラムの値を反映することも、テーブルに適切なカラムが含まれないときに InnoDB によって生成されたシーケンス値にすることもできます。削除された行のデータが OPTIMIZE TABLE ステートメントによって FULLTEXT インデックスから物理的に削除される前にテキスト検索を行う場合、この値は innodb_ft_index_table テーブルの行をスキップするために使用されます。詳細は、InnoDB 全文インデックスの最適化を参照してください。

:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DELETED;
+--------+
| DOC_ID |
+--------+
| 6 |
| 7 |
| 8 |
+--------+
3 rows in set (0.00 sec)

:

21.29.25 INFORMATION_SCHEMA INNODB_FT_BEING_DELETED テーブル

INNODB_FT_BEING_DELETED テーブルは、OPTIMIZE TABLE の保守操作中にのみ使用される INNODB_FT_DELETED テーブルのスナップショットです。OPTIMIZE TABLE が実行されると、INNODB_FT_BEING_DELETED テーブルは空になり、INNODB_FT_DELETED テーブルから DOC_ID が削除されます。INNODB_FT_BEING_DELETED の内容は一般に有効期間が短いため、モニタリングやデバッグでのこのテーブルの有用性はかぎられます。FULLTEXT インデックスを持つテーブルでの OPTIMIZE TABLE の実行の詳細は、セクション12.9.6「MySQL の全文検索の微調整」を参照してください。

このテーブルは最初から、構成変数 innodb_ft_aux_table の値を設定するまで空です。出力は、INNODB_FT_DELETED テーブルに対して用意された出力例に似ています。

関連する使用法と使用例については、セクション14.14.4「InnoDB INFORMATION_SCHEMA FULLTEXT インデックステーブル」を参照してください。

表 21.27 INNODB_FT_BEING_DELETED のカラム

カラム名説明
DOC_ID削除されている過程にある行のドキュメント ID。この値は、ベースとなるテーブルに対して定義した ID カラムの値を反映することも、テーブルに適切なカラムが含まれないときに InnoDB によって生成されたシーケンス値にすることもできます。削除された行のデータが OPTIMIZE TABLE ステートメントによって FULLTEXT インデックスから物理的に削除される前にテキスト検索を行う場合、この値は innodb_ft_index_table テーブルの行をスキップするために使用されます。詳細は、InnoDB 全文インデックスの最適化を参照してください。

:

21.30 MySQL Cluster の INFORMATION_SCHEMA テーブル

次のセクションでは、MySQL Cluster に固有である INFORMATION_SCHEMA テーブルに関する情報について説明します。(FILES テーブルは標準 MySQL 5.6 で使用できますが、ここでは使用していません。)ndb_transid_mysql_connection_map テーブルは、MySQL Cluster バイナリまたはソース内でのみ利用できる INFORMATION_SCHEMA プラグインとして実装されており、MySQL Server 5.6 には存在しません。

MySQL Cluster のトランザクション、操作、スレッド、ブロック、およびその他のパフォーマンスの側面に関する追加統計およびその他のデータは、ndbinfo データベース内のテーブルから取得できます。これらのテーブルの詳細は、セクション18.5.10「ndbinfo MySQL Cluster 情報データベース」を参照してください。

21.30.1 INFORMATION_SCHEMA FILES テーブル

FILES テーブルは MySQL NDB ディスクデータテーブルが格納されるファイルに関する情報を提供します。

注記

このテーブルは、ディスクデータファイルに関する情報だけを提供します。個々の NDB テーブルのディスク領域の割り当てまたは可用性の判断には使用できません。ただし、ndb_desc を使用して、データがディスク上に格納された NDB テーブルごとにどれだけの領域が割り当てられているかとともに、そのテーブルに対しディスク上のデータのストレージに利用できる領域がどれだけ残っているかも表示できます。詳細は、セクション18.4.10「ndb_desc — NDB テーブルの表示」を参照してください。

INFORMATION_SCHEMASHOW備考
FILE_ID MySQL 拡張
FILE_NAME MySQL 拡張
FILE_TYPE MySQL 拡張
TABLESPACE_NAME MySQL 拡張
TABLE_CATALOG MySQL 拡張
TABLE_SCHEMA MySQL 拡張
TABLE_NAME MySQL 拡張
LOGFILE_GROUP_NAME MySQL 拡張
LOGFILE_GROUP_NUMBER MySQL 拡張
ENGINE MySQL 拡張
FULLTEXT_KEYS MySQL 拡張
DELETED_ROWS MySQL 拡張
UPDATE_COUNT MySQL 拡張
FREE_EXTENTS MySQL 拡張
TOTAL_EXTENTS MySQL 拡張
EXTENT_SIZE MySQL 拡張
INITIAL_SIZE MySQL 拡張
MAXIMUM_SIZE MySQL 拡張
AUTOEXTEND_SIZE MySQL 拡張
CREATION_TIME MySQL 拡張
LAST_UPDATE_TIME MySQL 拡張
LAST_ACCESS_TIME MySQL 拡張
RECOVER_TIME MySQL 拡張
TRANSACTION_COUNTER MySQL 拡張
VERSION MySQL 拡張
ROW_FORMAT MySQL 拡張
TABLE_ROWS MySQL 拡張
AVG_ROW_LENGTH MySQL 拡張
DATA_LENGTH MySQL 拡張
MAX_DATA_LENGTH MySQL 拡張
INDEX_LENGTH MySQL 拡張
DATA_FREE MySQL 拡張
CREATE_TIME MySQL 拡張
UPDATE_TIME MySQL 拡張
CHECK_TIME MySQL 拡張
CHECKSUM MySQL 拡張
STATUS MySQL 拡張
EXTRA MySQL 拡張

:

  • FILE_ID カラムの値は自動生成されます。

  • FILE_NAME は、CREATE LOGFILE GROUP または ALTER LOGFILE GROUP によって作成された UNDO ログファイルの名前か、CREATE TABLESPACE または ALTER TABLESPACE で作成されたデータファイルの名前です。

  • FILE_TYPE は、UNDOFILEDATAFILE、または TABLESPACE のいずれかの値です。

  • TABLESPACE_NAME は、ファイルが関連付けられているテーブルスペースの名前です。

  • 現在、TABLESPACE_CATALOG カラムの値は常に NULL です。

  • TABLE_NAME は、関連するファイルがある場合、そのファイルに関連付けられたディスクデータテーブルの名前です。

  • LOGFILE_GROUP_NAME カラムは、ログファイルまたはデータファイルが属しているログファイルのグループに名前を付けます。

  • UNDO ログファイルでは、LOGFILE_GROUP_NUMBER には、ログファイルが属しているログファイルグループの自動生成された ID 番号が含まれます。

  • MySQL Cluster ディスクデータのログファイルまたはデータファイルに対し、ENGINE カラムの値は常に NDB または NDBCLUSTER になります。

  • MySQL Cluster ディスクデータのログファイルまたはデータファイルでは、FULLTEXT_KEYS カラムの値は常に空です。

  • FREE EXTENTS カラムには、まだファイルが使用していないエクステントの数が表示されます。TOTAL EXTENTS カラムには、ファイルに割り当てられたエクステントの総数が表示されます。

    これらの 2 つのカラムの差が、現在ファイルで使用されているエクステントの数です。

    SELECT TOTAL_EXTENTS - FREE_EXTENTS AS extents_used FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = 'myfile.dat';

    この差と EXTENT_SIZE カラムの値 (バイト単位でファイルのエクステントのサイズを指定します) とを乗算すると、ファイルで使用されているディスク容量を概算できます。

    SELECT (TOTAL_EXTENTS - FREE_EXTENTS) * EXTENT_SIZE AS bytes_used FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = 'myfile.dat';

    同様に、FREE_EXTENTSEXTENT_SIZE とを乗算すると、特定のファイルに利用できる残りの領域の容量を見積もることができます。

    SELECT FREE_EXTENTS * EXTENT_SIZE AS bytes_free FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = 'myfile.dat';
    重要

    前述のクエリーで生成されたバイト値は概算に過ぎず、その精度は EXTENT_SIZE の値に反比例します。つまり、EXTENT_SIZE が大きくなれば、概算の精度は低くなります。

    エクステントがいったん使用されると、エクステントが含まれているデータファイルを破棄せずに再度解放することはできません。これにより、ディスクデータのテーブルからの削除はディスクスペースを解放しないことになります。

    エクステントサイズは CREATE TABLESPACE ステートメントで設定できます。詳細は、セクション13.1.18「CREATE TABLESPACE 構文」を参照してください。

  • INITIAL_SIZE カラムには、ファイルのサイズがバイトで表示されます。これは、ファイルの作成に使用された CREATE LOGFILE GROUPALTER LOGFILE GROUPCREATE TABLESPACE、または ALTER TABLESPACE ステートメントの INITIAL_SIZE 句に使用された値と同じです。

    MySQL Cluster ディスクデータファイルの場合、MAXIMUM_SIZE カラムの値は常に、INITIAL_SIZE と同じであり、AUTOEXTEND_SIZE カラムは常に空です。

  • CREATION_TIME カラムには、ファイルが作成された日時が表示されます。LAST_UPDATE_TIME カラムには、ファイルが最後に変更された日時が表示されます。LAST_ACCESSED カラムは、ファイルが最後にサーバーによってアクセスされた日時が表示されます。

    現在は、これらのカラムの値はオペレーティングシステムからレポートされたものであり、NDB ストレージエンジンにより提供されたものではありません。オペレーティングシステムから値が提供されていない場合には、これらのカラムには 0000-00-00 00:00:00 が表示されます。

  • MySQL クラスタディスクデータのファイルでは、RECOVER_TIME および TRANSACTION_COUNTER カラムは常に 0 です。

  • MySQL Cluster ディスクデータファイルでは、次のカラムは常に NULL になります。

    • VERSION

    • ROW_FORMAT

    • TABLE_ROWS

    • AVG_ROW_LENGTH

    • DATA_LENGTH

    • MAX_DATA_LENGTH

    • INDEX_LENGTH

    • DATA_FREE

    • CREATE_TIME

    • UPDATE_TIME

    • CHECK_TIME

    • CHECKSUM

  • MySQL Cluster ディスクデータファイルでは、STATUS カラムの値は常に NORMAL です。

  • MySQL Cluster ディスクデータファイルでは、各データノードがファイルのコピーを持っているため、EXTRA カラムには、ファイルが属しているデータノードが表示されます。4 つのデータノードを持つ MySQL Cluster で、次のステートメントを使用するとします。

    CREATE LOGFILE GROUP mygroup ADD UNDOFILE 'new_undo.dat' INITIAL_SIZE 2G ENGINE NDB;

    CREATE LOGFILE GROUP ステートメントの実行が成功したあと、次に示すものに似た、FILES テーブルに対するこのクエリーの結果が表示されます。

    mysql> SELECT LOGFILE_GROUP_NAME, FILE_TYPE, EXTRA -> FROM INFORMATION_SCHEMA.FILES -> WHERE FILE_NAME = 'new_undo.dat';+--------------------+-------------+----------------+
    | LOGFILE_GROUP_NAME | FILE_TYPE | EXTRA |
    +--------------------+-------------+----------------+
    | mygroup | UNDO FILE | CLUSTER_NODE=3 |
    | mygroup | UNDO FILE | CLUSTER_NODE=4 |
    | mygroup | UNDO FILE | CLUSTER_NODE=5 |
    | mygroup | UNDO FILE | CLUSTER_NODE=6 |
    +--------------------+-------------+----------------+
    4 rows in set (0.01 sec)
  • FILES テーブルは、非標準テーブルです。

  • ログファイルグループの作成すると、追加の行が FILES テーブルに存在します。この行は FILE_NAME カラムの値に対して NULL です。この行に対し、FILE_ID カラムの値は常に 0 で、FILE_TYPE カラムの値は常に UNDO FILE で、STATUS カラムの値は常に NORMAL になります。現在、ENGINE カラムの値は常に NDBCLUSTER です。

    この行の FREE_EXTENTS カラムには、名前と番号がそれぞれ LOGFILE_GROUP_NAME カラムと LOGFILE_GROUP_NUMBER カラムに表示される特定のログファイルグループに属す、すべての Undo ファイルで利用可能な空きエクステントの合計数が表示されます。

    MySQL Cluster に既存のログファイルグループが存在せず、次のステートメントを使用してログファイルグループを作成するとします。

    mysql> CREATE LOGFILE GROUP lg1 -> ADD UNDOFILE 'undofile.dat' -> INITIAL_SIZE = 16M -> UNDO_BUFFER_SIZE = 1M -> ENGINE = NDB;Query OK, 0 rows affected (3.81 sec)

    FILES テーブルにクエリーすると、NULL 行が表示されます。

    mysql> SELECT DISTINCT -> FILE_NAME AS File, -> FREE_EXTENTS AS Free, -> TOTAL_EXTENTS AS Total, -> EXTENT_SIZE AS Size, -> INITIAL_SIZE AS Initial -> FROM INFORMATION_SCHEMA.FILES;+--------------+---------+---------+------+----------+
    | File | Free | Total | Size | Initial |
    +--------------+---------+---------+------+----------+
    | undofile.dat | NULL | 4194304 | 4 | 16777216 |
    | NULL | 4184068 | NULL | 4 | NULL |
    +--------------+---------+---------+------+----------+
    2 rows in set (0.01 sec)

    Undo ロギングに利用できる空きエクステントの総数は常に、Undo ファイルの維持に必要なオーバーヘッドのために、ログファイルグループ内のすべての Undo ファイルの TOTAL_EXTENTS カラムの値の合計よりもいくぶん少なくなります。これは、ログファイルグループに 2 番目の Undo ファイルを追加しから、FILES テーブルに対して前述のクエリーを繰り返すと表示できます。

    mysql> ALTER LOGFILE GROUP lg1 -> ADD UNDOFILE 'undofile02.dat' -> INITIAL_SIZE = 4M -> ENGINE = NDB;Query OK, 0 rows affected (1.02 sec)
    mysql> SELECT DISTINCT -> FILE_NAME AS File, -> FREE_EXTENTS AS Free, -> TOTAL_EXTENTS AS Total, -> EXTENT_SIZE AS Size, -> INITIAL_SIZE AS Initial -> FROM INFORMATION_SCHEMA.FILES;+----------------+---------+---------+------+----------+
    | File | Free | Total | Size | Initial |
    +----------------+---------+---------+------+----------+
    | undofile.dat | NULL | 4194304 | 4 | 16777216 |
    | undofile02.dat | NULL | 1048576 | 4 | 4194304 |
    | NULL | 5223944 | NULL | 4 | NULL |
    +----------------+---------+---------+------+----------+
    3 rows in set (0.01 sec)

    このログファイルグループを使用したディスクデータテーブルが Undo ロギングに利用できる空き領域の容量 (バイト単位) は、空きエクステントの数と初期サイズとを乗算すると概算できます。

    mysql> SELECT -> FREE_EXTENTS AS 'Free Extents', -> FREE_EXTENTS * EXTENT_SIZE AS 'Free Bytes' -> FROM INFORMATION_SCHEMA.FILES -> WHERE LOGFILE_GROUP_NAME = 'lg1' -> AND FILE_NAME IS NULL;+--------------+------------+
    | Free Extents | Free Bytes |
    +--------------+------------+
    | 5223944 | 20895776 |
    +--------------+------------+
    1 row in set (0.02 sec)

    MySQL Cluster ディスクデータテーブルを作成し、複数の行を挿入した場合、たとえば、その後 Undo ロギングに使用できる領域がどれだけ残っているかを概算で確認できます。

    mysql> CREATE TABLESPACE ts1 -> ADD DATAFILE 'data1.dat' -> USE LOGFILE GROUP lg1 -> INITIAL_SIZE 512M -> ENGINE = NDB;Query OK, 0 rows affected (8.71 sec)
    mysql> CREATE TABLE dd ( -> c1 INT NOT NULL PRIMARY KEY, -> c2 INT, -> c3 DATE -> ) -> TABLESPACE ts1 STORAGE DISK -> ENGINE = NDB;Query OK, 0 rows affected (2.11 sec)
    mysql> INSERT INTO dd VALUES -> (NULL, 1234567890, '2007-02-02'), -> (NULL, 1126789005, '2007-02-03'), -> (NULL, 1357924680, '2007-02-04'), -> (NULL, 1642097531, '2007-02-05');Query OK, 4 rows affected (0.01 sec)
    mysql> SELECT -> FREE_EXTENTS AS 'Free Extents', -> FREE_EXTENTS * EXTENT_SIZE AS 'Free Bytes' -> FROM INFORMATION_SCHEMA.FILES -> WHERE LOGFILE_GROUP_NAME = 'lg1' -> AND FILE_NAME IS NULL;+--------------+------------+
    | Free Extents | Free Bytes |
    +--------------+------------+
    | 5207565 | 20830260 |
    +--------------+------------+
    1 row in set (0.01 sec)
  • データファイルがテーブルスペースに関連付けられているかどうかを問わず、MySQL Cluster テーブルスペースの追加の行が FILES テーブルに存在します。この行は FILE_NAME カラムの値に対して NULL です。この行に対し、FILE_ID カラムの値は常に 0 で、FILE_TYPE カラムの値は常に TABLESPACE で、STATUS カラムの値は常に NORMAL になります。現在、ENGINE カラムの値は常に NDBCLUSTER です。

  • FILES テーブルに関連付けられた SHOW ステートメントはありません。

  • MySQL ディスクデータオブジェクトの作成と削除の追加情報と例については、セクション18.5.12「MySQL Cluster ディスクデータテーブル」を参照してください。

21.30.2 INFORMATION_SCHEMA ndb_transid_mysql_connection_map テーブル

ndb_transid_mysql_connection_map テーブルは、NDB トランザクション、NDB トランザクションコーディネータ、API ノードとして MySQL Cluster に接続された MySQL Server 間のマッピングを提供します。この情報は、ndbinfo MySQL Cluster 情報データベースの server_operations および server_transactions テーブルに移入するときに使用されます。

INFORMATION_SCHEMASHOW備考
mysql_connection_id MySQL Server 接続 ID
node_id トランザクションコーディネータノード ID
ndb_transid NDB トランザクション ID

mysql_connection_id は、SHOW PROCESSLIST の出力に示された接続またはセッション ID と同じです。

このテーブルに関連付けられた SHOW ステートメントはありません。

これは、MySQL Cluster に固有の非標準テーブルです。これは、INFORMATION_SCHEMA プラグインとして実装されます。SHOW PLUGINS の出力を確認して、このプラグインがサポートされていることを検証できます。ndb_transid_mysql_connection_map サポートが有効である場合、次に (強調テキストを使用して) 示すように、このステートメントの出力には、この名前を持ち、タイプが INFORMATION SCHEMA で、ステータスが ACTIVE であるプラグインが含まれます。

mysql> SHOW PLUGINS;+----------------------------------+--------+--------------------+---------+---------+
| Name | Status | Type | Library | License |
+----------------------------------+--------+--------------------+---------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| mysql_old_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL |
| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ndbcluster | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ndbinfo | ACTIVE | STORAGE ENGINE | NULL | GPL || ndb_transid_mysql_connection_map | ACTIVE | INFORMATION SCHEMA | NULL | GPL || InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
+----------------------------------+--------+--------------------+---------+---------+
22 rows in set (0.00 sec)

プラグインはデフォルトで有効になっています。--ndb-transid-mysql-connection-map オプションを付けてサーバーを起動すると、これを無効 (または、プラグインが開始していないかぎりサーバーが実行できないように強制する) にできます。プラグインが無効の場合、SHOW PLUGINS でステータスが DISABLED と表示されます。実行時にプラグインは有効または無効にできません。

このテーブルとカラムの名前は小文字を使用して表示されますが、SQL ステートメントで参照するときには大文字も小文字も使用できます。

このテーブルを作成するには、MySQL Server は、MySQL Cluster 配布で提供されたバイナリか、NDB ストレージエンジンサポートを有効にして MySQL Cluster ソースから構築されたバイナリである必要があります。これは、標準 MySQL 5.6 Server では利用できません。

21.31 スレッドプールの INFORMATION_SCHEMA テーブル

次のセクションでは、スレッドプールプラグインに関連付けられた INFORMATION_SCHEMA テーブルについて説明します。スレッドプール操作に関する情報を示します。

  • TP_THREAD_STATE: スレッドプールのスレッド状態に関する情報

  • TP_THREAD_GROUP_STATE: スレッドプールのスレッドグループ状態に関する情報

  • TP_THREAD_GROUP_STATS: スレッドグループ統計

これらのテーブル内の行は、特定時点のスナップショットを表します。TP_THREAD_STATE の場合、スレッドグループのすべての行で特定時点のスナップショットを構成します。そのため、MySQL Server では、スナップショットの生成中にスレッドグループの相互排他ロックを保持します。ただし、TP_THREAD_STATE に対するステートメントが MySQL Server 全体をブロックできないようにするため、すべてのスレッドグループで同時に相互排他ロックを保持することはありません。

スレッドプール INFORMATION_SCHEMA テーブルは、個々のプラグインによって実装され、特定のテーブルをロードするかどうかは、ほかのテーブルとは無関係に決定できます (セクション8.11.6.1「スレッドプールコンポーネントとインストール」を参照してください)。ただし、すべてのテーブルの内容は、有効なスレッドプールプラグインに応じて異なります。テーブルプラグインが有効だが、スレッドプールプラグインが有効ではない場合、テーブルは表示可能になり、アクセス可能ですが、空になります。

21.31.1 INFORMATION_SCHEMA TP_THREAD_STATE テーブル

このテーブルには、接続を処理するためにスレッドプールで作成されたスレッドごとに 1 行が存在します。テーブルには次のカラムがあります。

  • TP_GROUP_ID

    スレッドグループ ID です。

  • TP_THREAD_NUMBER

    スレッドグループ内のスレッドの ID です。TP_GROUP_IDTP_THREAD_NUMBER の組み合わせが、テーブル内での一意のキーになります。

  • PROCESS_COUNT

    このスレッドを使用しているステートメントが現在実行している 10 ミリ秒間隔です。0 は実行しているステートメントがないことを示し、1 はステートメントが最初の 10 ミリ秒に存在していることを示す、というようになります。

  • WAIT_TYPE

    スレッドの待機のタイプです。NULL はスレッドがブロックされていることを示します。それ以外の場合、スレッドは thd_wait_begin() の呼び出しによってブロックされ、値は待機のタイプを指定します。TP_THREAD_GROUP_STATS テーブルの xxx_WAIT カラムは、待機タイプごとのカウントを累積します。

    WAIT_TYPE 値は、次の表に示すように、待機のタイプを記述した文字列です。

    表 21.28 WAIT_TYPE の値

    待機タイプ意味
    THD_WAIT_SLEEPスリープの待機
    THD_WAIT_DISKIOディスク IO の待機
    THD_WAIT_ROW_LOCK行ロックの待機
    THD_WAIT_GLOBAL_LOCKグローバルロックの待機
    THD_WAIT_META_DATA_LOCKメタデータロックの待機
    THD_WAIT_TABLE_LOCKテーブルロックの待機
    THD_WAIT_USER_LOCKユーザーロックの待機
    THD_WAIT_BINLOGbinlog の待機
    THD_WAIT_GROUP_COMMITグループコミットの待機
    THD_WAIT_SYNCfsync の待機

21.31.2 INFORMATION_SCHEMA TP_THREAD_GROUP_STATE テーブル

このテーブルには、スレッドプール内のスレッドグループごとに 1 行存在します。それぞれの行には、グループの現在の状態に関する情報が表示されます。テーブルには次のカラムがあります。

  • TP_GROUP_ID

    スレッドグループ ID です。これはテーブル内の一意のキーです。

  • CONSUMER THREADS

    コンシューマスレッドの数です。アクティブなスレッドが停止またはブロックされると、実行開始可能なスレッドが最大 1 つ存在します。

  • RESERVE_THREADS

    予約状態のスレッドの数です。これは、新しいスレッドをウェイクする必要が生じ、コンシューマスレッドがなくなるまで開始されないことを意味します。これは、通常の操作で必要になる数よりも多くのスレッドをスレッドグループが作成したときに、ほとんどのスレッドが最終的に達する状態です。多くの場合、スレッドグループは短い間追加スレッドを必要とし、その後しばらくの間はふたたび必要とすることはありません。この場合には予約状態になり、ふたたび必要とされるまでその状態のままです。ある程度のメモリーリソースをべつに使用しますが、追加のコンピューティングリソースは必要ありません。

  • CONNECTION_COUNT

    このスレッドグループを使用した接続の数です。

  • QUEUED_QUERIES

    優先度の高いキューで待機しているステートメントの数です。

  • QUEUED_TRANSACTIONS

    優先度の低いキューで待機しているステートメントの数です。これらは、開始されていないトランザクションの初期ステートメントなので、キューに入れられたトランザクションも表します。

  • STALL_LIMIT

    スレッドグループに関する thread_pool_stall_limit 変数の値です。これはすべてのスレッドグループで同じ値です。

  • PRIO_KICKUP_TIMER

    スレッドグループに関する thread_pool_prio_kickup_timer の値です。これはすべてのスレッドグループで同じ値です。

  • ALGORITHM

    スレッドグループに関する thread_pool_algorithm の値です。これはすべてのスレッドグループで同じ値です。

  • THREAD_COUNT

    このスレッドグループの一部としてスレッドプール内で開始されたスレッドの数です。

  • ACTIVE_THREAD_COUNT

    ステートメントを実行しているアクティブなスレッドの数です。

  • MAX_THREAD_IDS_IN_GROUP

    グループ内のスレッドの最大スレッド ID です。これは、TP_THREAD_GROUP_STATE テーブルから選択したときのスレッドの MAX(TP_THREAD_NUMBER) と同じです。つまり、次の 2 つのクエリーは同等です。

    SELECT TP_GROUP_ID, MAX_THREAD_IDS_IN_GROUP
    FROM TP_THREAD_GROUP_STATE;
    SELECT TP_GROUP_ID, MAX(TP_THREAD_NUMBER)
    FROM TP_THREAD_STATE GROUP BY TP_GROUP_ID;
  • STALLED_THREAD_COUNT

    停止したスレッドグループ内のステートメントの数です。停止したステートメントが実行している可能性はありますが、スレッドプールから見ると停止して、進行していません。長時間実行しているステートメントはすぐにこのカテゴリで終了します。

  • WAITING_THREAD_NUMBER

    スレッドグループ内のステートメントのポーリングを処理するスレッドがある場合、これにより、このスレッドグループ内のスレッド番号が指定されます。このスレッドがステートメントを実行している可能性があります。

  • OLDEST_QUEUED

    もっとも古いキューに入れられたステートメントが実行待機した時間です (ミリ秒単位)。

21.31.3 INFORMATION_SCHEMA TP_THREAD_GROUP_STATS テーブル

このテーブルはスレッドグループあたりの統計をレポートします。グループごとに 1 行があります。テーブルには次のカラムがあります。

  • TP_GROUP_ID

    スレッドグループ ID です。これはテーブル内の一意のキーです。

  • CONNECTIONS_STARTED

    開始した接続の数です。

  • CONNECTIONS_CLOSED

    終了した接続の数です。

  • QUERIES_EXECUTED

    実行したステートメントの数です。この数は、ステートメントが実行を終了したときではなく、開始したときに増えます。

  • QUERIES_QUEUED

    実行を待ってキューに入れられた、受け取ったステートメントの数です。これは、スレッドグループがキューに入れることなく即座に実行を開始できたステートメントはカウントされません。即座に実行を開始できるのは、セクション8.11.6.2「スレッドプール操作」に記した条件に該当する場合です。

  • THREADS_STARTED

    開始したスレッドの数です。

  • PRIO_KICKUPS

    thread_pool_prio_kickup_timer システム変数の値に基づいて、優先度の低いキューから優先度の高いキューに移動したステートメントの数です。この数が急速に増えた場合、変数の値を増やしてください。急速に増えるカウンタは、トランザクションが非常に早くから開始しないようにする優先度システムが機能していないことを意味します。InnoDB の場合、これは、同時トランザクションが非常に多いためにパフォーマンスが低下している可能性が高くなっています。

  • STALLED_QUERIES_EXECUTED

    thread_pool_stall_limit システム変数の値よりも長い時間実行しているため、停止したと定義されるようになったステートメントの数です。

  • BECOME_CONSUMER_THREAD

    コンシューマスレッドロールがスレッドに割り当てられた回数です。

  • BECOME_RESERVE_THREAD

    予約スレッドロールがスレッドに割り当てられた回数です。

  • BECOME_WAITING_THREAD

    待機スレッドロールがスレッドに割り当てられた回数です。ステートメントがキューに入れられると、これは、通常の操作であっても、非常に頻繁に起こります。したがって、ステートメントがキューに入れられたシステムの負荷が高い場合には、この値が急速に増加しても正常です。

  • WAKE_THREAD_STALL_CHECKER

    複数のステートメントをできるだけ処理したり、待機スレッドロールに対処したりするために、スレッドのウェイクアップまたは作成を、停止チェックスレッドで決定した回数です。

  • SLEEP_WAITS

    THD_WAIT_SLEEP 待機の数です。たとえば SLEEP() 関数を呼び出すことによってスレッドがスリープになると発生します。

  • DISK_IO_WAITS

    THD_WAIT_DISKIO 待機の数です。ファイルシステムキャッシュにヒットしない可能性のあるディスク I/O をスレッドが実行すると発生します。ファイルに対する通常の読み取りおよび書き込みの場合ではなく、バッファープールがディスクに対してデータを読み取りおよび書き込むときに、このような待機が起こります。

  • ROW_LOCK_WAITS

    別のトランザクションによる行ロックの解放を待っている THD_WAIT_ROW_LOCK 待機の数です。

  • GLOBAL_LOCK_WAITS

    グローバルロックの解放を待っている THD_WAIT_GLOBAL_LOCK 待機の数です。

  • META_DATA_LOCK_WAITS

    メタデータロックの解放を待っている THD_WAIT_META_DATA_LOCK 待機の数です。

  • TABLE_LOCK_WAITS

    ステートメントがアクセスする必要のあるテーブルのロック解除を待っている THD_WAIT_TABLE_LOCK 待機の数です。

  • USER_LOCK_WAITS

    ユーザースレッドで構築された固有のロックを待っている THD_WAIT_USER_LOCK 待機の数です。

  • BINLOG_WAITS

    バイナリログの解放を待っている THD_WAIT_BINLOG_WAITS 待機の数です。

  • GROUP_COMMIT_WAITS

    THD_WAIT_GROUP_COMMIT 待機の数です。その他のパーティーがトランザクションの担当分を完了するまで、グループコミットが待機する必要があるときに発生します。

  • FSYNC_WAITS

    ファイル同期操作を待っている THD_WAIT_SYNC 待機の数です。

21.32 SHOW ステートメントの拡張

SHOW ステートメントの一部の拡張は、INFORMATION_SCHEMA の実装を伴います。

  • SHOW を使用すると、INFORMATION_SCHEMA 自体の構造に関する情報を取得できます。

  • いくつかの SHOW ステートメントでは、表示する行をより柔軟に指定できる WHERE 句を使用できます。

INFORMATION_SCHEMA は情報データベースなので、その名前は SHOW DATABASES の出力に含まれます。同様に、SHOW TABLESINFORMATION_SCHEMA と一緒に使用すると、テーブルのリストを取得できます。

mysql> SHOW TABLES FROM INFORMATION_SCHEMA;+---------------------------------------+
| Tables_in_INFORMATION_SCHEMA |
+---------------------------------------+
| CHARACTER_SETS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS |
| COLUMN_PRIVILEGES |
| ENGINES |
| EVENTS |
| FILES |
| GLOBAL_STATUS |
| GLOBAL_VARIABLES |
| KEY_COLUMN_USAGE |
| PARTITIONS |
| PLUGINS |
| PROCESSLIST |
| REFERENTIAL_CONSTRAINTS |
| ROUTINES |
| SCHEMATA |
| SCHEMA_PRIVILEGES |
| SESSION_STATUS |
| SESSION_VARIABLES |
| STATISTICS |
| TABLES |
| TABLE_CONSTRAINTS |
| TABLE_PRIVILEGES |
| TRIGGERS |
| USER_PRIVILEGES |
| VIEWS |
+---------------------------------------+
27 rows in set (0.00 sec)

SHOW COLUMNS および DESCRIBE は個々の INFORMATION_SCHEMA テーブルのカラムに関する情報を表示できます。

表示される行を制限する LIKE 句を受け入れる SHOW ステートメントは、選択した行が満たす必要のあるより一般的な条件を指定する WHERE 句も許可します。

SHOW CHARACTER SET
SHOW COLLATION
SHOW COLUMNS
SHOW DATABASES
SHOW FUNCTION STATUS
SHOW INDEX
SHOW OPEN TABLES
SHOW PROCEDURE STATUS
SHOW STATUS
SHOW TABLE STATUS
SHOW TABLES
SHOW TRIGGERS
SHOW VARIABLES

WHERE 句がある場合、これは SHOW ステートメントで表示されるカラム名に対して評価されます。たとえば、SHOW CHARACTER SET ステートメントはこれらの出力カラムを生成します。

mysql> SHOW CHARACTER SET;+----------+-----------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
...

WHERE 句を SHOW CHARACTER SET と一緒に使用するには、これらのカラム名を参照します。たとえば、次のステートメントは、デフォルトの照合順序が文字列 'japanese' を含む文字セットに関する情報を表示します。

mysql> SHOW CHARACTER SET WHERE `Default collation` LIKE '%japanese%';+---------+---------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+---------------------------+---------------------+--------+
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
+---------+---------------------------+---------------------+--------+

このステートメントはマルチバイト文字セットを表示します。

mysql> SHOW CHARACTER SET WHERE Maxlen > 1;+---------+---------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+---------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
+---------+---------------------------+---------------------+--------+
関連キーワード:  テーブル,SCHEMA,INFORMATION,MySQL,カラム,します,INNODB,21,TABLE,NAME