information_schema 下的所有表都是使用的 Memory 和 InnoDB 存储引擎,且都是临时表,不是持久表,在数据库重启之后这些数据会丢失,在 MySQL 的 4 个系统库中,也是 唯一一个在文件系统上没有对应库表的目录和文件的系统库 。
下面我们按照这些表的各自用途的相似度,我们把 information_schema 下的表做了如下归类,本期我们先大致了解下 information_schema 系统库中都有哪些表,这些表大致都有什么用途。
1. Server 层统计信息字典表
COLUMNS:
提供查询表中的列(字段)信息
该表为 InnoDB 存储引擎的临时表
KEY_COLUMN_USAGE:
提供查询哪些索引列存在约束条件
该表中的信息包含主键、唯一索引、外键等约束的信息,例如:所在库表列名,引用的库表列名等。表中的信息与 TABLE_CONSTRAINTS 表中记录的信息有些类似,但 TABLE_CONSTRAINTS 表中没有记录约束引用的库表列信息。但是却记录了 TABLE_CONSTRAINTS 表中所没有的约束类型信息
该表为 Memory 引擎临时表
REFERENTIAL_CONSTRAINTS:
提供查询关于外键约束的一些信息
该表为 Memory 引擎临时表
STATISTICS:
提供查询关于索引的一些统计信息,一个索引对应一行记录
该表为 Memory 引擎临时表
TABLE_CONSTRAINTS:
提供查询表相关的约束信息
该表为 Memory 引擎临时表
FILES:
提供查询 MySQL 的数据表空间文件相关的信息,包含 InnoDB 存储引擎和 NDB 存储引擎相关的数据文件信息,由于 NDB 存储引擎在国内较少使用,我们大多数场景(95% 以上场景 InnoDB 存储引擎都满可以使用)都是使用 InnoDB 存储引擎
该表为 Memory 存储引擎表
ENGINES:
提供查询 MySQL Server 支持的引擎相关的信息
该表为 Memory 引擎临时表
TABLESPACES:
提供查询关于活跃表空间的相关信息(主要记录的是 NDB 存储引擎表空间信息)
注意:该表不提供有关 InnoDB 存储引擎的表空间的信息。 对于 InnoDB 表空间元数据信息,请查询 INNODB_SYS_TABLESPACES 和 INNODB_SYS_DATAFILES 表。另外,从 MySQL 5.7.8 开始,INFORMATION_SCHEMA.FILES 表也提供查询 InnoDB 表空间的元数据信息
该表为 Memory 引擎临时表。
SCHEMATA:
提供查询 MySQL Server 中的数据库列表信息,一个 schema 就代表一个 database
该表为 Memory 引擎临时表
2. Server 层表级别对象字典表
VIEWS:
提供查询数据库中的视图相关的信息,查询该表的帐号需要拥有 show view 权限
该表为 InnoDB 引擎临时表
TRIGGERS:
提供查询关于某个数据库下的触发器相关的信息,要查询某个表的触发器,查询的账户必须要有 trigger 权限
该表为 InnoDB 引擎临时表
TABLES:
提供查询数据库内的表相关的基本信息
该表为 Memory 引擎临时表
ROUTINES:
提供查询关于存储过程和存储函数的信息(不包括用户自定义函数 UDF),该表中的信息与“mysql.proc”中记录的信息相对应(如果该表中有值的话)
该表为 InnoDB 引擎临时表
PARTITIONS:
提供查询关于分区表的信息
该表为 InnoDB 引擎临时表
EVENTS:
提供查询计划任务事件相关的信息
该表是 InnoDB 引擎临时表
PARAMETERS:
提供有关存储过程和函数的参数信息,以及有关存储函数的返回值的信息。 这些参数信息与 mysql.proc 表中的 param_list 列记录的内容类似
该表为 InnoDB 引擎临时表
3. Server 层混杂信息字典表
GLOBAL_STATUS、GLOBAL_VARIABLES、SESSION_STATUS、SESSION_VARIABLES:
提供查询全局、会话级别的的状态变量与系统变量信息,这些表为 Memory 引擎临时表
OPTIMIZER_TRACE:
提供优化程序跟踪功能产生的信息。
跟踪功能默认关闭,使用 optimizer_trace 系统变量启用跟踪功能。如果开启该功能,则每个会话只能跟踪他自己执行的语句,不能看到其他会话执行的语句,且每个会话只能记录最后一个跟踪的 SQL 语句
该表为 InnoDB 引擎临时表
PLUGINS:
提供查询关于 MySQL Server 中支持哪些插件的信息
该表为 InnoDB 引擎临时表
PROCESSLIST:
提供查询一些关于线程运行过程中的状态信息
该表为 InnoDB 引擎临时表
PROFILING:
提供查询关于语句性能分析的信息。其记录内容对应于 SHOW PROFILES 和 SHOW PROFILE 语句产生的信息。该表需要在会话变量 profiling=1 时才会记录语句性能分析信息,否则该表不记录。
注意:从 MySQL 5.7.2 开始,此表不再推荐使用,在未来的 MySQL 版本中删除。改用 Performance Schema 代替
该表为 Memory 引擎临时表
CHARACTER_SETS:
提供查询 MySQL Server 支持的可用字符集有哪些
该表为 Memory 引擎临时表
COLLATIONS:
提供查询 MySQL Server 支持的可用校对规则有哪些
该表为 Memory 引擎临时表
COLLATION_CHARACTER_SET_APPLICABILITY:
提供查询 MySQL Server 中哪种字符集适用于什么校对规则。查询结果集相当于从 SHOW COLLATION 获得的结果集中的前两个字段值。该表目前并没有发现有太大作用,为 Memory 引擎临时表
COLUMN_PRIVILEGES:
提供查询关于列(字段)的权限信息,表中的内容来自 mysql.column_priv 列权限表(需要针对一个表的列单独授权之后才会有内容)
该表为 Memory 引擎临时表
SCHEMA_PRIVILEGES:
提供查询关于库级别的权限信息,每种类型的库级别权限记录一行信息,该表中的信息来自 mysql.db 表
该表为 Memory 引擎临时表
TABLE_PRIVILEGES:
提供查询关于表级别权限信息,该表中的内容来自 mysql.tables_priv
该表为 Memory 引擎临时表
USER_PRIVILEGES:
提供查询全局权限的信息,该表中的信息来自 mysql.user 表
该表为 Memory 引擎临时表
4. InnoDB 层系统字典表
INNODB_SYS_DATAFILES:
提供查询 InnoDB file-per-table 和常规表空间数据文件的路径信息,等同于 InnoDB 数据字典中 SYS_DATAFILES 表中的信息
该表中的信息包含 InnoDB 所有表空间类型的元数据,包括独立表空间、常规表空间、系统表空间、临时表空间和 undo 表空间(如果开启了独立表空间的话)
该表为 memory 引擎临时表,查询该表的用户需要有 process 权限。
INNODB_SYS_VIRTUAL:
提供查询有关 InnoDB 虚拟生成列和与之关联的列的元数据信息,等同于 InnoDB 数据字典内部 SYS_VIRTUAL 表中的信息。INNODB_SYS_VIRTUAL 表中展示的行信息是虚拟生成列相关联列的每个列的信息。
该表为 memory 引擎临时表,查询该表的用户需要有 process 权限
INNODB_SYS_INDEXES:
提供查询有关 InnoDB 索引的元数据信息,等同于 InnoDB 数据字典内部 SYS_INDEXES 表中的信息
该表为 memory 引擎临时表,查询该表的用户需要具有 process 权限
INNODB_SYS_TABLES:
提供查询有关 InnoDB 表的元数据,等同于 InnoDB 数据字典内部 SYS_TABLES 表的信息。
该表为 memory 引擎临时表,查询该表的用户需要有 process 权限
INNODB_SYS_FIELDS:
提供查询有关 InnoDB 索引键列(字段)的元数据信息,等同于 InnoDB 数据字典内部 SYS_FIELDS 表的信息
该表为 memory 引擎临时表,查询该表的用户需要有 process 权限
INNODB_SYS_TABLESPACES:
提供查询有关 InnoDB 独立表空间和普通表空间的元数据信息(也包含了全文索引表空间),等同于 InnoDB 数据字典内部 SYS_TABLESPACES 表中的信息
该表为 memory 引擎临时表,查询该表的用户需要有 process 权限
INNODB_SYS_FOREIGN_COLS:
提供查询有关 InnoDB 外键列的状态信息,等同于 InnoDB 数据字典内部 SYS_FOREIGN_COLS 表的信息
该表为 memory 引擎临时表,查询该表的用户需要有 process 权限
INNODB_SYS_COLUMNS:
提供查询有关 InnoDB 表列的元数据信息,等同于 InnoDB 数据字典内部 SYS_COLUMNS 表的信息
该表为 memory 引擎临时表,查询该表的用户需要具有 process 权限
INNODB_SYS_FOREIGN:
提供查询有关 InnoDB 外键的元数据信息,等同于 InnoDB 数据字典内部 SYS_FOREIGN 表的信息
该表为 memory 引擎临时表,查询该表的用户需要有 process 权限
INNODB_SYS_TABLESTATS:
提供查询有关 InnoDB 表的较低级别的状态信息视图。 MySQL 优化器会使用这些统计信息数据来计算并确定在查询 InnoDB 表时要使用哪个索引。这些信息保存在内存中的数据结构中,与存储在磁盘上的数据无对应关系。InnoDB 内部也无对应的系统表。
该表为 memory 引擎临时表,查询该表的用户需要有 process 权限
5. InnoDB 层锁、事务、统计信息字典表
INNODB_LOCKS:
提供查询 innodb 引擎事务中正在请求的且并未获得的且同时阻塞了其他事务的锁信息(即没有发生不同事务之间的锁等待的锁信息,在这里是查看不到的,例如,只有一个事务时,该事务所加的锁信息无法查看到)。该表中的内容可以用于诊断高并发下的锁争用信息。
该表为 memory 引擎临时表,访问该表需要拥有具有 process 权限
INNODB_TRX:
提供查询当前在 InnoDB 引擎中执行的每个事务(不包括只读事务)的信息,包括事务是否正在等待锁、事务什么时间点开始、以及事务正在执行的 SQL 语句文本信息等(如果有 SQL 的话)。
该表为 memory 引擎临时表,查询该表的用户需要有 process 权限
INNODB_BUFFER_PAGE_LRU:
提供查询缓冲池中的页面信息,与 INNODB_BUFFER_PAGE 表不同,INNODB_BUFFER_PAGE_LRU 表保存有关 innodb buffer pool 中的页如何进入 LRU 链表以及在 buffer pool 不够用时确定需要从缓冲池中逐出哪些页
该表为 Memory 引擎临时表
INNODB_LOCK_WAITS:
提供查询关于每个被阻塞的 InnoDB 事务的锁等待记录,包括发生锁等带事务所请求的锁和阻止该锁请求被授予的锁
该表为 memory 引擎表,访问该表用户需要有 process 权限
INNODB_TEMP_TABLE_INFO:
提供查询有关在 InnoDB 实例中当前处于活动状态的用户(已建立连接的用户,断开的用户连接对应的临时表会被自动删除)创建的 InnoDB 临时表的信息。 它不提供查询优化器使用的内部 InnoDB 临时表的信息查询。INNODB_TEMP_TABLE_INFO 表在首次查询时创建。
该表为 memory 引擎临时表,查询该表的用户需要有 process 权限
INNODB_BUFFER_PAGE:
提供查询关于 buffer pool 中的页相关的信息
查询该表需要用户具有 PROCESS 权限,该表为 Memory 引擎临时表
INNODB_METRICS:
提供查询 InnoDB 更为详细细致的性能信息,是对 InnoDB 的 PERFORMANCE_SCHEMA 的补充。通过对该表的查询,可用于检查 innodb 的整体健康状况。也可用于诊断性能瓶颈、资源短缺和应用程序的问题等。
该表为 memory 引擎临时表,查询该表的用户需要有 process 权限
INNODB_BUFFER_POOL_STATS:
提供查询一些 Innodb buffer pool 中的状态信息,该表中记录的信息与 SHOW ENGINE INNODB STATUS 输出的信息类似相同,另外,innodb buffer pool 的一些状态变量也提供了部分相同的值
查看该表需要有 process 权限,该表为 Memory 引擎临时表
6. InnoDB 层全文索引字典表
INNODB_FT_CONFIG:
提供查询有关 InnoDB 表的 FULLTEXT 索引和关联的元数据信息。查询此表之前,需要先设置 innodb_ft_aux_table='db_name/tb_name',db_name/tb_name 为包含全文索引的表名和库名。
查询该表的账户需要有 PROCESS 权限,该表为 Memory 引擎临时表
INNODB_FT_BEING_DELETED:
该表仅在 OPTIMIZE TABLE 语句执行维护操作期间作为 INNODB_FT_DELETED 表的快照数据存放使用。运行 OPTIMIZE TABLE 语句时,会先清空 INNODB_FT_BEING_DELETED 表中的数据,保存 INNODB_FT_DELETED 表中的快照数据到 INNODB_FT_BEING_DELETED 表,并从 INNODB_FT_DELETED 表中删除 DOC_ID。由于 INNODB_FT_BEING_DELETED 表中的内容通常生命周期较短,因此该表中的数据对于监控或者调试来说用处并不大。
表中默认不记录数据,需要设置系统配置参数 innodb_ft_aux_table=string(string 表示 db_name.tb_name 字符串),并创建好全文索引,设置好停用词等。
查询该表的账户需要有 PROCESS 权限,该表为 Memory 引擎临时表
INNODB_FT_DELETED:
提供查询从 InnoDB 表的 FULLTEXT 索引中删除的行信息。它的存在是为了避免在 InnoDB FULLTEXT 索引的 DML 操作期间进行昂贵的索引重组操作,新删除的全文索引中单词的信息将单独存储在该表中,在执行文本搜索时从中过滤出搜索结果,该表中的信息仅在执行 OPTIMIZE TABLE 语句时清空。
该表中的信息默认不记录,需要使用 innodb_ft_aux_table 选项(该选项默认值为空串)指定需要记录哪个 innodb 引擎表的信息,例如:test/test。
查询该表的账户需要有 PROCESS 权限,该表为 Memory 引擎临时表
INNODB_FT_DEFAULT_STOPWORD:
该表为默认的全文索引停用词表,提供查询停用词列表值。启用停用词表需要开启参数 innodb_ft_enable_stopword=ON,该参数默认为 ON,启用停用词功能之后,如果 innodb_ft_user_stopword_table 选项(针对指定的 innodb 引擎表中的全文索引生效)自定义了停用词库表名称值,则停用词功能使用 innodb_ft_user_stopword_table 选项指定的停用词表,如果 innodb_ft_user_stopword_table 选项未指定,而 innodb_ft_server_stopword_table 选项(针对所有的 innodb 引擎表中的全文索引生效)自定义了停用词库表名称值,则同停用词功能使用 innodb_ft_server_stopword_table 选项指定的停用词表,如果 innodb_ft_server_stopword_table 选项也未指定,则使用默认的停用词表,即 INNODB_FT_DEFAULT_STOPWORD 表。
查询该表需要账户有 PROCESS 权限,该表为 Memory 引擎临时表
INNODB_FT_INDEX_TABLE:
提供查询关于 innodb 表全文索引中用于反向文本查找的倒排索引的分词信息。
查询该表的账户需要有 PROCESS 权限,该表为 Memory 引擎临时表
INNODB_FT_INDEX_CACHE:
提供查询包含 FULLTEXT 索引的 innodb 存储引擎表中新插入行的全文索引标记信息。它存在的目的是为了避免在 DML 操作期间进行昂贵的索引重组,新插入的全文索引的单词的信息被单独存储在该表中,直到对表执行 OPTIMIZE TABLE 语句时、或者关闭服务器时、或者当高速缓存中存放的信息大小超过了 innodb_ft_cache_size 或 innodb_ft_total_cache_size 系统配置参数指定的大小才会执行清理。默认不记录数据,需要使用 innodb_ft_aux_table 系统配置参数指定需要记录哪个表中的新插入行的全文索引数据。
查询该表的账户需要有 PROCESS 权限,该表为 Memory 引擎临时表
7. InnoDB 层压缩相关字典表
INNODB_CMP 和 INNODB_CMP_RESET:
这两个表中的数据包含了与压缩的 InnoDB 表页有关的操作的状态信息。表中记录的数据为测量数据库中的 InnoDb 表压缩的有效性提供参考。
查询表的用户必须具有 PROCESS 权限,该表为 Memory 引擎临时表
INNODB_CMP_PER_INDEX 和 INNODB_CMP_PER_INDEX_RESET:
这两个表中记录着 InnoDB 压缩表数据和索引相关的操作状态信息,对数据库、表、索引的每个组合使用不同的统计信息,以便为评估特定表的压缩性能和实用性提供参考数据。
对于 InnoDB 压缩表,会对表中的数据和所有二级索引都进行压缩。此时表中的数据被视为另一个索引(包含所有数据列的聚集索引)。
注意:由于为每个索引收集单独的度量值会导致性能大幅度降低,因此默认情况下不收集 INNODB_CMP_PER_INDEX 和 INNODB_CMP_PER_INDEX_RESET 表统计信息。如果确有需要,启用系统配置参数 innodb_cmp_per_index_enabled 即可(该配置参数为动态变量,默认为 OFF)。
查询该表的账户需要有 PROCESS 权限,该表为 Memory 引擎临时表
INNODB_CMPMEM 和 INNODB_CMPMEM_RESET:
这两个表中记录着 InnoDB 缓冲池中压缩页上的状态信息,为测量数据库中 InnoDB 表压缩的有效性提供参考
查询该表的账户需要有 PROCESS 权限,该表为 Memory 引擎临时表
MySQL