MySQLマニュアルの「INFORMATION_SCHEMA」を読む

この記事は、2015年「MySQLマニュアルを読む」アドベントカレンダーの15日目です.



 私は古いMySQLユーザですから*1MySQLに最近入った機能や構文などは苦手です。業務でバリバリに使う環境にないと、ここ数年のMySQLの急速な機能拡大について行くのがたいへんというのが正直なところです。
 そんなわけで、機能としては知っているし用途も判るのだけど、ちゃんと情報を追ったことがなかったなと思い、今日は INFORMATION_SCHEMA のところを眺めてみることにしました。

MySQL :: MySQL 5.7 Reference Manual :: 20 INFORMATION_SCHEMA Tables

 20章の INFORMATION_SCHEMA Tables になります。

mysql> use information_schema
mysql> show tables;

 として見ると、マニュアルに書かれているとおりの31個のテーブルと、INNODB_* という名前の30個のテーブルがあることがわかります。

 マニュアルではアルファベット順になっているため、主に(私の主観で)種類ごとに分けてみました。
少しだけコメントもつけたので、参考になりましたら。


DB基本オブジェクト:

SCHEMATA
TABLES
COLUMNS
VIEWS
TRIGGERS
ROUTINES <--ストアド
PARAMETERS <--ストアドとかのパラメタ
STATISTICS <--indexのこと
TABLE_CONSTRAINTS <--PK/FK/UNIQUEキー
REFERENTIAL_CONSTRAINTS <--FK
KEY_COLUMN_USAGE

権限まわり:

USER_PRIVILEGES
SCHEMA_PRIVILEGES
TABLE_PRIVILEGES
COLUMN_PRIVILEGES

状態/設定確認:

GLOBAL_STATUS
GLOBAL_VARIABLES
SESSION_STATUS
SESSION_VARIABLES
PROCESSLIST

※MySQL5.7.6より、show_compatibility_56 値をオンにしていないと見えないので注意
※MySQL5.7.6より(笑)、本設定は Deprecated。PERFORMANCE_SCHEMAを参照する。http://dev.mysql.com/doc/refman/5.7/en/performance-schema-variable-table-migration.html

使用可能なキャラクタセット系:

CHARACTER_SETS
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY

その他使用可能オブジェクト系:

ENGINES
PLUGINS
TABLESPACES <--InnoDBの情報は返さない
FILES <--InnoDBの情報も返す
EVENTS <--イベントスケジューラ
OPTIMIZER_TRACE <--optimizer_trace値をオンにして使う
PARTITIONS <--1つのパーティションのテーブルも含む
PROFILING <--SHOW PROFILES相当。5.7.2からはDeprecated.

※PARTITIONSは、2つ以上のパーティションを切った時のみに出てくるものかと思ったら、パーティション指定をせずに CREATE TABLE したテーブルも含まれるのですね。つまり、すべてのテーブルの一覧+パーティション分けたものはその数ぶんだけ、出力されるものと考えてよさそうです。


 ひとつ例として、PLUGINS テーブルの中身を見てみました。
昨日の日記で「MySQLの拡張」として紹介したプラグインが、このテーブルで見ることができます。
INFORMATION_SCHEMAで表示できる情報をプラグインとして追加できたり、ストレージエンジンもプラグインとして扱われていることが分かります。
面白いのが binlog。これも内部の扱いではストレージンなのですね。確かに「データを書く」という点ではストレージエンジンなのでしょうけど、、、へんなの。

mysql> SELECT PLUGIN_NAME,PLUGIN_TYPE, PLUGIN_LICENSE FROM PLUGINS;
+----------------------------+--------------------+----------------+
| PLUGIN_NAME                | PLUGIN_TYPE        | PLUGIN_LICENSE |
+----------------------------+--------------------+----------------+
| binlog                     | STORAGE ENGINE     | GPL            |
| mysql_native_password      | AUTHENTICATION     | GPL            |
| sha256_password            | AUTHENTICATION     | GPL            |
| MRG_MYISAM                 | STORAGE ENGINE     | GPL            |
| MEMORY                     | STORAGE ENGINE     | GPL            |
| InnoDB                     | STORAGE ENGINE     | GPL            |
| INNODB_TRX                 | INFORMATION SCHEMA | GPL            |
| INNODB_LOCKS               | INFORMATION SCHEMA | GPL            |
| INNODB_LOCK_WAITS          | INFORMATION SCHEMA | GPL            |
| INNODB_CMP                 | INFORMATION SCHEMA | GPL            |
| INNODB_CMP_RESET           | INFORMATION SCHEMA | GPL            |
| INNODB_CMPMEM              | INFORMATION SCHEMA | GPL            |
| INNODB_CMPMEM_RESET        | INFORMATION SCHEMA | GPL            |
| INNODB_CMP_PER_INDEX       | INFORMATION SCHEMA | GPL            |
| INNODB_CMP_PER_INDEX_RESET | INFORMATION SCHEMA | GPL            |
| INNODB_BUFFER_PAGE         | INFORMATION SCHEMA | GPL            |
| INNODB_BUFFER_PAGE_LRU     | INFORMATION SCHEMA | GPL            |
| INNODB_BUFFER_POOL_STATS   | INFORMATION SCHEMA | GPL            |
| INNODB_TEMP_TABLE_INFO     | INFORMATION SCHEMA | GPL            |
| INNODB_METRICS             | INFORMATION SCHEMA | GPL            |
| INNODB_FT_DEFAULT_STOPWORD | INFORMATION SCHEMA | GPL            |
| INNODB_FT_DELETED          | INFORMATION SCHEMA | GPL            |
| INNODB_FT_BEING_DELETED    | INFORMATION SCHEMA | GPL            |
| INNODB_FT_CONFIG           | INFORMATION SCHEMA | GPL            |
| INNODB_FT_INDEX_CACHE      | INFORMATION SCHEMA | GPL            |
| INNODB_FT_INDEX_TABLE      | INFORMATION SCHEMA | GPL            |
| INNODB_SYS_TABLES          | INFORMATION SCHEMA | GPL            |
| INNODB_SYS_TABLESTATS      | INFORMATION SCHEMA | GPL            |
| INNODB_SYS_INDEXES         | INFORMATION SCHEMA | GPL            |
| INNODB_SYS_COLUMNS         | INFORMATION SCHEMA | GPL            |
| INNODB_SYS_FIELDS          | INFORMATION SCHEMA | GPL            |
| INNODB_SYS_FOREIGN         | INFORMATION SCHEMA | GPL            |
| INNODB_SYS_FOREIGN_COLS    | INFORMATION SCHEMA | GPL            |
| INNODB_SYS_TABLESPACES     | INFORMATION SCHEMA | GPL            |
| INNODB_SYS_DATAFILES       | INFORMATION SCHEMA | GPL            |
| INNODB_SYS_VIRTUAL         | INFORMATION SCHEMA | GPL            |
| MyISAM                     | STORAGE ENGINE     | GPL            |
| PERFORMANCE_SCHEMA         | STORAGE ENGINE     | GPL            |
| CSV                        | STORAGE ENGINE     | GPL            |
| FEDERATED                  | STORAGE ENGINE     | GPL            |
| BLACKHOLE                  | STORAGE ENGINE     | GPL            |
| partition                  | STORAGE ENGINE     | GPL            |
| ARCHIVE                    | STORAGE ENGINE     | GPL            |
| ngram                      | FTPARSER           | GPL            |
+----------------------------+--------------------+----------------+

おまけ: ENGINES の内容。

mysql> SELECT ENGINE, SUPPORT, TRANSACTIONS, XA, SAVEPOINTS FROM ENGINES;
+--------------------+---------+--------------+------+------------+
| ENGINE             | SUPPORT | TRANSACTIONS | XA   | SAVEPOINTS |
+--------------------+---------+--------------+------+------------+
| MRG_MYISAM         | YES     | NO           | NO   | NO         |
| CSV                | YES     | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | NO           | NO   | NO         |
| BLACKHOLE          | YES     | NO           | NO   | NO         |
| MyISAM             | YES     | NO           | NO   | NO         |
| InnoDB             | DEFAULT | YES          | YES  | YES        |
| ARCHIVE            | YES     | NO           | NO   | NO         |
| MEMORY             | YES     | NO           | NO   | NO         |
| FEDERATED          | NO      | NULL         | NULL | NULL       |
+--------------------+---------+--------------+------+------------+

*1:「古くから」でないところが若干自虐的