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