InnoDB INFORMATION_SCHEMA System Tables

InnoDB INFORMATION_SCHEMA System Tables

可以使用InnoDB INFORMATION_SCHEMA系统表提取有关InnoDB管理的schema对象的元数据。 此信息来自InnoDB内部系统表(也称为InnoDB数据字典),无法像常规InnoDB表那样直接查询。 传统上,您将使用“InnoDB监控”中的技术获取此类信息,设置InnoDB监控并解析SHOW ENGINE INNODB STATUS语句的输出。 InnoDB INFORMATION_SCHEMA表接口允许您使用SQL查询此数据。

除了INNODB_SYS_TABLESTATS之外,没有相应的内部系统表,InnoDB INFORMATION_SCHEMA系统表填充了直接从内部InnoDB系统表读取的数据,而不是从内存中缓存的元数据中读取。

InnoDB INFORMATION_SCHEMA系统表包括下面列出的表

mysql> SHOW TABLES FROM INFORMATION_SCHEMA LIKE 'INNODB_SYS%';

+--------------------------------------------+
| Tables_in_INFORMATION_SCHEMA (INNODB_SYS%) |
+--------------------------------------------+
| INNODB_SYS_DATAFILES                       |
| INNODB_SYS_VIRTUAL                         |
| INNODB_SYS_INDEXES                         |
| INNODB_SYS_TABLES                          |
| INNODB_SYS_FIELDS                          |
| INNODB_SYS_TABLESPACES                     |
| INNODB_SYS_FOREIGN_COLS                    |
| INNODB_SYS_COLUMNS                         |
| INNODB_SYS_FOREIGN                         |
| INNODB_SYS_TABLESTATS                      |
+--------------------------------------------+
10 rows in set (0.00 sec)

各表提供的信息:

  • INNODB_SYS_TABLES:提供有关InnoDB表的元数据,相当于InnoDB数据字典中SYS_TABLES表中的信息。

  • INNODB_SYS_COLUMNS:提供有关InnoDB表列的元数据,相当于InnoDB数据字典中SYS_COLUMNS表中的信息。

  • INNODB_SYS_INDEXES:提供有关InnoDB索引的元数据,相当于InnoDB数据字典中SYS_INDEXES表中的信息。

  • INNODB_SYS_FIELDS:提供有关InnoDB索引的键列(字段)的元数据,相当于InnoDB数据字典中SYS_FIELDS表中的信息。

  • INNODB_SYS_TABLESTATS:提供了有关InnoDB表的low-level状态信息的视图,该信息源自内存数据结构。没有相应的内部InnoDB系统表。

  • INNODB_SYS_DATAFILES:为InnoDB每表和一般表空间提供数据文件路径信息,相当于InnoDB数据字典中SYS_DATAFILES表中的信息。

  • INNODB_SYS_TABLESPACES:提供有关InnoDB 单独表空间一般表空间的元数据,相当于InnoDB数据字典中SYS_TABLESPACES表中的信息。

  • INNODB_SYS_FOREIGN:提供有关InnoDB表上定义的外键的元数据,相当于InnoDB数据字典中SYS_FOREIGN表中的信息。

  • INNODB_SYS_FOREIGN_COLS:提供有关InnoDB表上定义的外键列的元数据,相当于InnoDB数据字典中SYS_FOREIGN_COLS表中的信息。

  • INNODB_SYS_VIRTUAL表提供有关InnoDB虚拟生成列和虚拟生成列所基于的列的元数据,相当于InnoDB数据字典中SYS_VIRTUAL表中的信息。

16. INNODB_SYS_COLUMNS

INNODB_SYS_COLUMNS表提供有关InnoDB表列的元数据,相当于InnoDB数据字典中SYS_COLUMNS表的信息。

有关相关用法信息和示例,请参见“InnoDB INFORMATION_SCHEMA系统表”。

INNODB_SYS_COLUMNS表包含以下列:

  • TABLE_ID:表示与列关联的表的标识符;与INNODB_SYS_TABLES.TABLE_ID相同的值。
  • NAME :列的名称。这些名称可以是大写或小写,具体取决于lower_case_table_names设置。列没有特殊的系统保留名称。
  • POS :表中列的序号位置,从0开始并按顺序递增。 删除列时,将重新排序其余列,以使序列没有间隙。 虚拟生成列的POS值对列序列号和列的序号位置进行编码。 有关更多信息,请参见“INFORMATION_SCHEMA INNODB_SYS_VIRTUAL”表中的POS列说明。
  • 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,14 =GEOMETRY。
  • PRTYPE :InnoDB“精确类型”,一个二进制值,其中的位表示MySQL数据类型,字符集代码和可空性。
  • LEN :列长度,例如4表示INT,8表示BIGINT。 对于多字节字符集中的字符列,此长度值是表示定义(如VARCHAR(N))所需的最大字节长度; 也就是说,它可能是2 * N,3 * N,4 * N依此类推,具体取决于字符编码。

示例

mysql> desc test.tp;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| c1    | int(11)     | YES  |     | NULL    |       |
| c2    | int(11)     | YES  |     | NULL    |       |
| c3    | varchar(25) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.07 sec)


mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS where table_id=102;
+----------+------+-----+-------+---------+-----+
| TABLE_ID | NAME | POS | MTYPE | PRTYPE  | LEN |
+----------+------+-----+-------+---------+-----+
|      102 | c1   |   0 |     6 |    1027 |   4 |
|      102 | c2   |   1 |     6 |    1027 |   4 |
|      102 | c3   |   2 |    12 | 2949135 | 100 |
+----------+------+-----+-------+---------+-----+
3 rows in set (0.01 sec)

Notes

  • 您必须具有PROCESS权限才能查询此表。

  • 使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。

17. INNODB_SYS_DATAFILES

INNODB_SYS_DATAFILES表提供InnoDB文件每表和一般表空间的数据文件路径信息,相当于InnoDB数据字典中SYS_DATAFILES表中的信息。

有关相关用法信息和示例,请参见第“InnoDB INFORMATION_SCHEMA系统表”。

【注意】
INFORMATION_SCHEMA FILES表报告所有InnoDB表空间类型的元数据,包括单独表空间,通用表空间,系统表空间,临时表空间和undo表空间(如果存在)。

INNODB_SYS_DATAFILES表包含以下列:

  • SPACE:表空间ID。

  • PATH:表空间数据文件路径。如果在MySQL数据目录之外的位置创建了每表文件表空间,则路径值是绝对路径。否则,为相对路径。

示例

mysql> select * from innodb_sys_datafiles limit 48,2;
+-------+----------------------------------------------------------+
| SPACE | PATH                                                     |
+-------+----------------------------------------------------------+
|   226 | ./test/FTS_000000000000006b_000000000000007a_INDEX_6.ibd | --在datadir目录内相对路径
|   228 | /data/mysql3306_data/test/x1.ibd                         | --在datadir目录之外创建的,绝对路径
+-------+----------------------------------------------------------+
2 rows in set (0.00 sec)

Notes

  • 您必须具有PROCESS权限才能查询此表。

  • 使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。

18. INNODB_SYS_FIELDS

INNODB_SYS_FIELDS表提供有关InnoDB索引的键列(字段)的元数据,相当于InnoDB数据字典中SYS_FIELDS表的信息。

有关相关用法信息和示例,请参见第“InnoDB INFORMATION_SCHEMA系统表”。

INNODB_SYS_FIELDS表包含以下列:

  • INDEX_ID:与此键字段关联的索引的标识符;与INNODB_SYS_INDEXES.INDEX_ID相同的值。
  • NAME:表中原始列的名称;与INNODB_SYS_COLUMNS.NAME相同的值。
  • POS:索引中关键字段的序号位置,从0开始并按顺序递增。删除列时,将重新排序其余列,以使序列没有间隙。

示例

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS where index_id=102;
+----------+------+-----+
| INDEX_ID | NAME | POS |
+----------+------+-----+
|      102 | s1   |   0 |
+----------+------+-----+
1 row in set (0.00 sec)

Notes

  • 您必须具有PROCESS权限才能查询此表。

  • 使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。

19. INNODB_SYS_FOREIGN

INNODB_SYS_FOREIGN表提供有关InnoDB外键的元数据,相当于InnoDB数据字典中SYS_FOREIGN表的信息。

有关相关用法信息和示例,请参见第“InnoDB INFORMATION_SCHEMA系统表”。

INNODB_SYS_FOREIGN表包含以下列:

  • ID :外键索引的名称(不是数字值)。在schema(数据库)名称之前,例如test/products_fk。
  • FOR_NAME:此外键关系中子表的名称。
  • REF_NAME:此外键关系中父表的名称。
  • N_COLS :外键索引中的列数。
  • TYPE :包含有关外键列的信息的位标志集合,或者一起进行OR运算。 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;
+---------+----------+----------+--------+------+
| ID      | FOR_NAME | REF_NAME | N_COLS | TYPE |
+---------+----------+----------+--------+------+
| test/CO | test/t3  | test/t1  |      1 |    0 |
+---------+----------+----------+--------+------+
1 row in set (0.00 sec)

Notes

  • 您必须具有PROCESS权限才能查询此表。

  • 使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。

20. INNODB_SYS_FOREIGN_COLS

INNODB_SYS_FOREIGN_COLS表提供有关InnoDB外键列的状态信息,相当于InnoDB数据字典中SYS_FOREIGN_COLS表的信息。

有关相关用法信息和示例,请参见第“InnoDB INFORMATION_SCHEMA系统表”。

INNODB_SYS_FOREIGN_COLS表包含以下列:

  • ID:与此索引键字段关联的外键索引,使用与INNODB_SYS_FOREIGN.ID相同的值。
  • FOR_COL_NAME:子表中关联列的名称。
  • REF_COL_NAME:父表中关联列的名称。
  • POS:外键索引中此键字段的序号位置,从0开始。

示例

mysql>  SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS;
+---------+--------------+--------------+-----+
| ID      | FOR_COL_NAME | REF_COL_NAME | POS |
+---------+--------------+--------------+-----+
| test/CO | s2           | s3           |   0 |
+---------+--------------+--------------+-----+
1 row in set (0.00 sec)

Notes

  • 您必须具有PROCESS权限才能查询此表。

  • 使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。

21. INNODB_SYS_INDEXES

INNODB_SYS_INDEXES表提供有关InnoDB索引的元数据,相当于InnoDB数据字典中内部SYS_INDEXES表中的信息。

有关相关用法信息和示例,请参见第“InnoDB INFORMATION_SCHEMA系统表”。

INNODB_SYS_INDEXES表包含以下列:

  • INDEX_ID :索引的标识符。索引标识符在实例中的所有数据库中都是唯一的。
  • NAME :索引的名称。 InnoDB隐式创建的大多数索引具有一致的名称,但索引名称不一定是唯一的。 示例:主键索引为PRIMARY,未指定主键时表示主键的索引为GEN_CLUST_INDEX,外键约束为ID_IND,FOR_IND和REF_IND。
  • TABLE_ID :表示与索引关联的表的标识符;与INNODB_SYS_TABLES.TABLE_ID相同的值。
  • TYPE :从标识索引类型的位级信息派生的数值。 0 =非唯一二级指数; 1 =自动生成聚簇索引(GEN_CLUST_INDEX); 2 =唯一的非聚集索引; 3 =聚集索引; 32 =全文索引; 64 =空间指数; 128 =虚拟生成列上的二级索引。
  • N_FIELDS :索引键中的列数。对于GEN_CLUST_INDEX索引,此值为0,因为索引是使用人工值而不是实际表列创建的。
  • PAGE_NO :索引B树的根页码。对于全文索引,PAGE_NO字段未使用并设置为-1(FIL_NULL),因为全文索引在多个B树(辅助表)中布局。
  • SPACE :索引所在的表空间的标识符。 0表示InnoDB系统表空间。 任何其他数字表示使用单独的.ibd文件以单独表空间创建的表。 在TRUNCATE TABLE语句之后,此标识符保持不变。 由于表的所有索引都与表位于同一表空间中,因此该值不一定是唯一的。
  • MERGE_THRESHOLD:索引页面的合并阈值。 如果删除行或者更新操作缩短行时索引页中的数据量低于MERGE_THRESHOLD值,InnoDB会尝试将索引页与相邻索引页合并。 默认阈值为50%。 有关更多信息,请参见“配置索引页的合并阈值”。

示例

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES where index_id = 102;
+----------+------+----------+------+----------+---------+-------+-----------------+
| INDEX_ID | NAME | TABLE_ID | TYPE | N_FIELDS | PAGE_NO | SPACE | MERGE_THRESHOLD |
+----------+------+----------+------+----------+---------+-------+-----------------+
|      102 | s1   |       95 |    0 |        1 |       4 |   202 |              50 |
+----------+------+----------+------+----------+---------+-------+-----------------+
1 row in set (0.00 sec)

Notes

  • 您必须具有PROCESS权限才能查询此表。

  • 使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。

22. INNODB_SYS_TABLES

INNODB_SYS_TABLES表提供有关InnoDB表的元数据,相当于InnoDB数据字典中SYS_TABLES表的信息。

有关相关用法信息和示例,请参见第“InnoDB INFORMATION_SCHEMA系统表”。

INNODB_SYS_TABLES表包含以下列:

  • TABLE_ID :InnoDB表的标识符。该值在实例中的所有数据库中都是唯一的。
  • NAME :表的名称。在适当的位置由模式(数据库)名称开头,例如test/t1。数据库和用户表的名称与最初定义的名称相同,可能受lower_case_table_names设置的影响。
  • FLAG :有关表格式和存储特性的位级数据,包括行格式,压缩页面大小(如果适用),以及DATA DIRECTORY子句是否与CREATE TABLE或ALTER TABLE一起使用。
  • N_COLS :表中的列数。报告的数字包括InnoDB创建的三个隐藏列(DB_ROW_ID,DB_TRX_ID和DB_ROLL_PTR)。报告的数字还包括虚拟生成的列(如果存在)。
  • SPACE :表所在表空间的标识符。 0表示InnoDB系统表空间。 任何其他数字表示每个表的文件表空间或一般的表空间。 在TRUNCATE TABLE语句之后,此标识符保持不变。 对于每表文件表空间,此标识符对于实例中所有数据库的表是唯一的。
  • FILE_FORMAT :表的文件格式(Antelope或Barracuda)。
  • ROW_FORMAT :表的行格式 (Compact, Redundant, Dynamic, Compressed).
  • ZIP_PAGE_SIZE:zip页面大小。仅适用于使用压缩行格式的表。
  • SPACE_TYPE :表所属的表空间类型。 可能的值包括系统表空间的System,通用表空间的General和单独表空间的Single。 使用CREATE TABLE或ALTER TABLE TABLESPACE = innodb_system分配给系统表空间的表具有常规SPACE_TYPE。 有关更多信息,请参见CREATE TABLESPACE。

示例

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE TABLE_ID = 214\G
*************************** 1. row ***************************
     TABLE_ID: 214
         NAME: test/t1
         FLAG: 129
       N_COLS: 4
        SPACE: 233
  FILE_FORMAT: Antelope
   ROW_FORMAT: Compact
ZIP_PAGE_SIZE: 0
   SPACE_TYPE: General

Notes

  • 您必须具有PROCESS权限才能查询此表。

  • 使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。

解释INNODB_SYS_TABLES.FLAG列值

INNODB_SYS_TABLES.FLAG列提供有关表格格式和存储特征的位级信息。 您可以通过将下表中提供的适用十进制数值相加来解释FLAG列值。

在以下示例中,表t1使用ROW_FORMAT = DYNAMIC并且FLAG值为33.根据上表中的信息,我们可以看到位位置0将被设置为1,位位置5将被设置为32 具有DYNAMIC行格式的表。 这些值加起来为FLAG值33。

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.00 sec)

23. INNODB_SYS_TABLESPACES

INNODB_SYS_TABLESPACES表提供有关InnoDB文件每表和一般表空间的元数据,相当于InnoDB数据字典中SYS_TABLESPACES表中的信息。

有关相关用法信息和示例,请参见第“InnoDB INFORMATION_SCHEMA系统表”。

【注意】
INFORMATION_SCHEMA FILES表报告所有InnoDB表空间类型的元数据,包括单独表空间,通用表空间,系统表空间,临时表空间和撤消表空间(如果存在)。

INNODB_SYS_TABLESPACES表包含以下列:

  • SPACE :表空间ID
  • NAME :schema(数据库)和表名,例如test/t1
  • FLAG :有关表空间格式和存储特性的位级数据。
  • FILE_FORMAT :表空间文件格式。 例如,Antelope,Barracuda或Any(通用表空间支持任何行格式)。 此字段中的数据是从驻留在.ibd文件中的表空间标记信息中解释的。 有关InnoDB文件格式的更多信息,请参见“InnoDB文件格式管理”。
  • ROW_FORMAT :表空间行格式(Compact or Redundant, Dynamic, or Compressed)。此字段中的数据是从驻留在.ibd文件中的表空间标记信息中解释的。
  • PAGE_SIZE :表空间页面大小。此字段中的数据是从驻留在.ibd文件中的表空间标记信息中解释的。
  • ZIP_PAGE_SIZE :表空间zip页面大小。此字段中的数据是从驻留在.ibd文件中的表空间标记信息中解释的。
  • SPACE_TYPE :表空间的类型。可能的值包括常规表空间的常规和每表文件表空间的单个。
  • FS_BLOCK_SIZE :文件系统块大小,是用于打孔的单位大小。此列添加了InnoDB透明页面压缩功能的介绍。
  • FILE_SIZE :表示文件的最大大小,未压缩。此列添加了InnoDB透明页面压缩功能的介绍。
  • ALLOCATED_SIZE:文件的实际大小,即磁盘上分配的空间量。此列添加了InnoDB透明页面压缩功能的介绍。

示例

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES limit 48,2;
+-------+----------------------------------------------------+------+-------------+------------+-----------+---------------+------------+---------------+-----------+----------------+
| SPACE | NAME                                               | FLAG | FILE_FORMAT | ROW_FORMAT | PAGE_SIZE | ZIP_PAGE_SIZE | SPACE_TYPE | FS_BLOCK_SIZE | FILE_SIZE | ALLOCATED_SIZE |
+-------+----------------------------------------------------+------+-------------+------------+-----------+---------------+------------+---------------+-----------+----------------+
|   226 | test/FTS_000000000000006b_000000000000007a_INDEX_6 |   33 | Barracuda   | Dynamic    |     16384 |             0 | Single     |          4096 |     98304 |          98304 |
|   228 | test/x1                                            | 1057 | Barracuda   | Dynamic    |     16384 |             0 | Single     |          4096 |     98304 |          98304 |
+-------+----------------------------------------------------+------+-------------+------------+-----------+---------------+------------+---------------+-----------+----------------+
2 rows in set (0.00 sec)

Notes

  • 您必须具有PROCESS权限才能查询此表。

  • 使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。

  • 因为所有Antelope文件格式的表空间标志始终为零(与表标志不同),如果表空间行格式为Redundant或Compact,则无法从此标志中确定整数。 因此,ROW_FORMAT字段的可能值为“Compact或Redundant”,“Compressed”或“Dynamic”。

  • 随着通用表空间的引入,InnoDB系统表空间数据(用于SPACE 0)在INNODB_SYS_TABLESPACES中公开。

解释INNODB_SYS_TABLESPACES.FLAG列值

INNODB_SYS_TABLESPACES.FLAG列提供有关表空间格式和存储特征的位级信息。

在MySQL 5.6之前,除了bit位置0设置之外,表和表空间标志是相同的。 在MySQL 5.6中,增加了对4K和8K页面的支持,这需要额外的4位来保存逻辑页面大小。 同样在MySQL 5.6中,为CREATE TABLE和ALTER TABLE DATA DIRECTORY子句添加了支持,该子句允许将每表文件表空间存储在MySQL数据目录之外的位置。 此功能需要为表和表空间标志添加一个位,但不在同一位置。

您可以通过将下表中提供的适用十进制数值相加来解释表空间FLAG列值。



在以下示例中,使用innodb_file_per_table = ON创建表t1,它在其自己的表空间中创建表t1。 查询INNODB_SYS_TABLESPACES时,我们看到表空间的FLAG值为33.要确定此值的到达方式,请查看上表中描述的位值。 位0的值为1,因为表t1使用DYNAMIC行格式。 位5的值为32,因为表空间是使用DYNAMIC行格式的每表文件表空间。 位位置6-9为0,因为innodb_page_size设置为默认的16K值。 其他位值不适用,因此设置为0.位位置0和位位置5的值加起来为FLAG值33。

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)

24. INNODB_SYS_TABLESTATS

INNODB_SYS_TABLESTATS提供有关InnoDB表的low-level状态信息的视图。 MySQL优化器使用此数据来计算查询InnoDB表时要使用的索引。 此信息源自内存数据结构,而不是与存储在磁盘上的数据相对应。 没有相应的内部InnoDB系统表。

InnoDB表在此视图中表示,如果它们自上次服务器重新启动后已打开,并且不会超出表缓存。 持久统计信息可用的表始终在此视图中表示。

表统计信息仅针对修改索引列的DELETE或UPDATE操作进行更新。 仅修改非索引列的操作不会更新统计信息。

有关相关用法信息和示例,请参见第“InnoDB INFORMATION_SCHEMA系统表”。

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_COUNTER :DML操作修改的行数,例如INSERT,UPDATE,DELETE,以及外键的级联操作。每次重新计算表统计信息时,都会重置此列
  • AUTOINC :为任何基于自动增量的操作发出的下一个数字。 AUTOINC值更改的速率取决于请求自动增量号码的次数以及每次请求授予的号码数量。
  • REF_COUNT :当此计数器达到零时,可以从表缓存中逐出表元数据。

示例

mysql> mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS;
+----------+----------------------------------------------------+-------------------+----------+------------------+------------------+------------------+---------+-----------+
| TABLE_ID | NAME                                               | STATS_INITIALIZED | NUM_ROWS | CLUST_INDEX_SIZE | OTHER_INDEX_SIZE | MODIFIED_COUNTER | AUTOINC | REF_COUNT |
+----------+----------------------------------------------------+-------------------+----------+------------------+------------------+------------------+---------+-----------+
|       14 | SYS_DATAFILES                                      | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|       11 | SYS_FOREIGN                                        | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|       12 | SYS_FOREIGN_COLS                                   | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|       13 | SYS_TABLESPACES                                    | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|       15 | SYS_VIRTUAL                                        | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|       62 | move_db/account                                    | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|       34 | mysql/engine_cost                                  | Initialized       |        2 |                1 |                0 |                0 |       0 |         0 |
|       32 | mysql/gtid_executed                                | Initialized       |        0 |                1 |                0 |                1 |       0 |         1 |
|       36 | mysql/help_category                                | Initialized       |       40 |                1 |                1 |                0 |       0 |         1 |
|       37 | mysql/help_keyword                                 | Initialized       |      801 |                6 |                5 |                0 |       0 |         1 |
|       38 | mysql/help_relation                                | Initialized       |      469 |                5 |                0 |                0 |       0 |         1 |
|       35 | mysql/help_topic                                   | Initialized       |      656 |               97 |                5 |                0 |       0 |         1 |
|       28 | mysql/innodb_index_stats                           | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|       27 | mysql/innodb_table_stats                           | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|       16 | mysql/plugin                                       | Initialized       |        0 |                1 |                0 |                0 |       0 |         0 |
|       33 | mysql/server_cost                                  | Initialized       |        6 |                1 |                0 |                0 |       0 |         0 |
|       17 | mysql/servers                                      | Initialized       |        0 |                1 |                0 |                0 |       0 |         0 |
|       30 | mysql/slave_master_info                            | Initialized       |        0 |                1 |                0 |                0 |       0 |         0 |
|       29 | mysql/slave_relay_log_info                         | Initialized       |        0 |                1 |                0 |                0 |       0 |         0 |
|       31 | mysql/slave_worker_info                            | Initialized       |        0 |                1 |                0 |                0 |       0 |         0 |
|       23 | mysql/time_zone                                    | Initialized       |        0 |                1 |                0 |                0 |       1 |         0 |
|       26 | mysql/time_zone_leap_second                        | Initialized       |        0 |                1 |                0 |                0 |       0 |         0 |
|       22 | mysql/time_zone_name                               | Initialized       |        0 |                1 |                0 |                0 |       0 |         0 |
|       24 | mysql/time_zone_transition                         | Initialized       |        0 |                1 |                0 |                0 |       0 |         0 |
|       25 | mysql/time_zone_transition_type                    | Initialized       |        0 |                1 |                0 |                0 |       0 |         0 |
|       39 | sys/sys_config                                     | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      113 | test/FTS_000000000000006b_000000000000007a_INDEX_1 | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      114 | test/FTS_000000000000006b_000000000000007a_INDEX_2 | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      115 | test/FTS_000000000000006b_000000000000007a_INDEX_3 | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      116 | test/FTS_000000000000006b_000000000000007a_INDEX_4 | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      117 | test/FTS_000000000000006b_000000000000007a_INDEX_5 | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      118 | test/FTS_000000000000006b_000000000000007a_INDEX_6 | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      108 | test/FTS_000000000000006b_BEING_DELETED            | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      109 | test/FTS_000000000000006b_BEING_DELETED_CACHE      | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      110 | test/FTS_000000000000006b_CONFIG                   | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      111 | test/FTS_000000000000006b_DELETED                  | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      112 | test/FTS_000000000000006b_DELETED_CACHE            | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      106 | test/account                                       | Initialized       |        4 |                1 |                0 |                1 |       0 |         2 |
|      107 | test/articles                                      | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|       64 | test/t                                             | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|       94 | test/t1                                            | Initialized       |        0 |                1 |                0 |                0 |       0 |         1 |
|       95 | test/t3                                            | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      102 | test/tp#P#p0                                       | Initialized       |        0 |                1 |                0 |                0 |       0 |         1 |
|      103 | test/tp#P#p1                                       | Initialized       |        0 |                1 |                0 |                0 |       0 |         1 |
|      104 | test/tp#P#p2                                       | Initialized       |        0 |                1 |                0 |                0 |       0 |         1 |
|      105 | test/tp#P#p3                                       | Initialized       |        0 |                1 |                0 |                0 |       0 |         1 |
|       96 | test/ts#P#p0#SP#p0sp0                              | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|       97 | test/ts#P#p0#SP#p0sp1                              | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|       98 | test/ts#P#p1#SP#p1sp0                              | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|       99 | test/ts#P#p1#SP#p1sp1                              | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      100 | test/ts#P#p2#SP#p2sp0                              | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      101 | test/ts#P#p2#SP#p2sp1                              | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
|      119 | test/x1                                            | Uninitialized     |        0 |                0 |                0 |                0 |       0 |         0 |
+----------+----------------------------------------------------+-------------------+----------+------------------+------------------+------------------+---------+-----------+
53 rows in set (0.00 sec)

Notes

  • 此表主要用于专家级性能监视,或者在为MySQL开发与性能相关的扩展时。

  • 您必须具有PROCESS权限才能查询此表。

  • 使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。

25. INNODB_SYS_VIRTUAL

INNODB_SYS_VIRTUAL表提供有关InnoDB虚拟生成列和虚拟生成列所基于的列的元数据,相当于InnoDB数据字典中SYS_VIRTUAL表中的信息。

对于虚拟生成列所基于的每个列,INNODB_SYS_VIRTUAL表中会出现一行。

INNODB_SYS_VIRTUAL表有以下列:

  • TABLE_ID:表示与虚拟列关联的表的标识符;与INNODB_SYS_TABLES.TABLE_ID相同的值。
  • POS:虚拟生成列的位置值。 该值很大,因为它编码列序列号和序号位置。 用于计算值的公式使用按位运算。 公式为((InnoDB实例的第n个虚拟生成列+ 1)<< 16)+虚拟生成列的序号位置。 例如,如果InnoDB实例中的第一个虚拟生成列是表的第三列,则公式为(0 + 1)<< 16)+ 2. InnoDB实例中的第一个虚拟生成列始终为数字0。 作为表中的第三列,虚拟生成列的序号位置为2.序数位置从0开始计算。
  • BASE_POS:虚拟生成列所基于的列的序号位置。

示例

mysql> CREATE TABLE `t11` (
         `a` int(11) DEFAULT NULL,
         `b` int(11) DEFAULT NULL,
         `c` int(11) GENERATED ALWAYS AS (a+b) VIRTUAL,
         `h` varchar(10) DEFAULT NULL
       ) ENGINE=InnoDB;

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_VIRTUAL
    ->        WHERE TABLE_ID IN (SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE "test/t11");   
+----------+-------+----------+
| TABLE_ID | POS   | BASE_POS |
+----------+-------+----------+
|      120 | 65538 |        0 |
|      120 | 65538 |        1 |
+----------+-------+----------+
2 rows in set (0.00 sec)

Notes

  • 如果为虚拟生成的列分配常量值,如下例所示,该列的条目不会出现在INNODB_SYS_VIRTUAL表中。要显示条目,虚拟生成的列必须具有基本列。
mysql> CREATE TABLE `t12` (
    ->          `a` int(11) DEFAULT NULL,
    ->          `b` int(11) DEFAULT NULL,
    ->          `c` int(11) GENERATED ALWAYS AS (5) VIRTUAL
    ->        ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.05 sec)

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_VIRTUAL;
+----------+-------+----------+
| TABLE_ID | POS   | BASE_POS |
+----------+-------+----------+
|      120 | 65538 |        0 |
|      120 | 65538 |        1 |
+----------+-------+----------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_VIRTUAL
    ->        WHERE TABLE_ID IN (SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE "test/t12");
Empty set (0.00 sec)

但是,此类列的元数据将显示在INNODB_SYS_COLUMNS表中。

  • 您必须具有PROCESS权限才能查询此表。

  • 使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS语句查看有关此表的列的其他信息,包括数据类型和默认值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值