Information Schema

为了和 MySQL 保持兼容,TiDB 支持很多 INFORMATION_SCHEMA 表,其中有不少表都支持相应的 SHOW 命令。查询 INFORMATION_SCHEMA 表也为表的连接操作提供了可能。

ANALYZE_STATUS 表

ANALYZE_STATUS 表提供正在执行的收集统计信息的任务以及有限条历史任务记录。

  1. select * from `ANALYZE_STATUS`;
  1. +--------------+------------+----------------+-------------------+----------------+---------------------+----------+
  2. | TABLE_SCHEMA | TABLE_NAME | PARTITION_NAME | JOB_INFO | PROCESSED_ROWS | START_TIME | STATE |
  3. +--------------+------------+----------------+-------------------+----------------+---------------------+----------+
  4. | test | t | | analyze index idx | 2 | 2019-06-21 19:51:14 | finished |
  5. | test | t | | analyze columns | 2 | 2019-06-21 19:51:14 | finished |
  6. | test | t1 | p0 | analyze columns | 0 | 2019-06-21 19:51:15 | finished |
  7. | test | t1 | p3 | analyze columns | 0 | 2019-06-21 19:51:15 | finished |
  8. | test | t1 | p1 | analyze columns | 0 | 2019-06-21 19:51:15 | finished |
  9. | test | t1 | p2 | analyze columns | 1 | 2019-06-21 19:51:15 | finished |
  10. +--------------+------------+----------------+-------------------+----------------+---------------------+----------+
  11. 6 rows in set

CHARACTER_SETS 表

CHARACTER_SETS 表提供字符集相关的信息。TiDB 目前仅支持部分字符集。

  1. SELECT * FROM character_sets;
  1. +--------------------+----------------------+---------------+--------+
  2. | CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | DESCRIPTION | MAXLEN |
  3. +--------------------+----------------------+---------------+--------+
  4. | utf8 | utf8_bin | UTF-8 Unicode | 3 |
  5. | utf8mb4 | utf8mb4_bin | UTF-8 Unicode | 4 |
  6. | ascii | ascii_bin | US ASCII | 1 |
  7. | latin1 | latin1_bin | Latin1 | 1 |
  8. | binary | binary | binary | 1 |
  9. +--------------------+----------------------+---------------+--------+
  10. 5 rows in set (0.00 sec)

COLLATIONS 表

COLLATIONS 表提供了 CHARACTER_SETS 表中字符集对应的排序规则列表。TiDB 当前仅支持二进制排序规则,包含该表仅为兼容 MySQL。

  1. SELECT * FROM collations WHERE character_set_name='utf8mb4';
  1. +------------------------+--------------------+------+------------+-------------+---------+
  2. | COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
  3. +------------------------+--------------------+------+------------+-------------+---------+
  4. | utf8mb4_general_ci | utf8mb4 | 45 | Yes | Yes | 1 |
  5. | utf8mb4_bin | utf8mb4 | 46 | | Yes | 1 |
  6. | utf8mb4_unicode_ci | utf8mb4 | 224 | | Yes | 1 |
  7. | utf8mb4_icelandic_ci | utf8mb4 | 225 | | Yes | 1 |
  8. | utf8mb4_latvian_ci | utf8mb4 | 226 | | Yes | 1 |
  9. | utf8mb4_romanian_ci | utf8mb4 | 227 | | Yes | 1 |
  10. | utf8mb4_slovenian_ci | utf8mb4 | 228 | | Yes | 1 |
  11. | utf8mb4_polish_ci | utf8mb4 | 229 | | Yes | 1 |
  12. | utf8mb4_estonian_ci | utf8mb4 | 230 | | Yes | 1 |
  13. | utf8mb4_spanish_ci | utf8mb4 | 231 | | Yes | 1 |
  14. | utf8mb4_swedish_ci | utf8mb4 | 232 | | Yes | 1 |
  15. | utf8mb4_turkish_ci | utf8mb4 | 233 | | Yes | 1 |
  16. | utf8mb4_czech_ci | utf8mb4 | 234 | | Yes | 1 |
  17. | utf8mb4_danish_ci | utf8mb4 | 235 | | Yes | 1 |
  18. | utf8mb4_lithuanian_ci | utf8mb4 | 236 | | Yes | 1 |
  19. | utf8mb4_slovak_ci | utf8mb4 | 237 | | Yes | 1 |
  20. | utf8mb4_spanish2_ci | utf8mb4 | 238 | | Yes | 1 |
  21. | utf8mb4_roman_ci | utf8mb4 | 239 | | Yes | 1 |
  22. | utf8mb4_persian_ci | utf8mb4 | 240 | | Yes | 1 |
  23. | utf8mb4_esperanto_ci | utf8mb4 | 241 | | Yes | 1 |
  24. | utf8mb4_hungarian_ci | utf8mb4 | 242 | | Yes | 1 |
  25. | utf8mb4_sinhala_ci | utf8mb4 | 243 | | Yes | 1 |
  26. | utf8mb4_german2_ci | utf8mb4 | 244 | | Yes | 1 |
  27. | utf8mb4_croatian_ci | utf8mb4 | 245 | | Yes | 1 |
  28. | utf8mb4_unicode_520_ci | utf8mb4 | 246 | | Yes | 1 |
  29. | utf8mb4_vietnamese_ci | utf8mb4 | 247 | | Yes | 1 |
  30. +------------------------+--------------------+------+------------+-------------+---------+
  31. 26 rows in set (0.00 sec)

COLLATION_CHARACTER_SET_APPLICABILITY 表

COLLATION_CHARACTER_SET_APPLICABILITY 表将排序规则映射至适用的字符集名称。和 COLLATIONS 表一样,包含此表也是为了兼容 MySQL。

  1. SELECT * FROM collation_character_set_applicability WHERE character_set_name='utf8mb4';
  1. +------------------------+--------------------+
  2. | COLLATION_NAME | CHARACTER_SET_NAME |
  3. +------------------------+--------------------+
  4. | utf8mb4_general_ci | utf8mb4 |
  5. | utf8mb4_bin | utf8mb4 |
  6. | utf8mb4_unicode_ci | utf8mb4 |
  7. | utf8mb4_icelandic_ci | utf8mb4 |
  8. | utf8mb4_latvian_ci | utf8mb4 |
  9. | utf8mb4_romanian_ci | utf8mb4 |
  10. | utf8mb4_slovenian_ci | utf8mb4 |
  11. | utf8mb4_polish_ci | utf8mb4 |
  12. | utf8mb4_estonian_ci | utf8mb4 |
  13. | utf8mb4_spanish_ci | utf8mb4 |
  14. | utf8mb4_swedish_ci | utf8mb4 |
  15. | utf8mb4_turkish_ci | utf8mb4 |
  16. | utf8mb4_czech_ci | utf8mb4 |
  17. | utf8mb4_danish_ci | utf8mb4 |
  18. | utf8mb4_lithuanian_ci | utf8mb4 |
  19. | utf8mb4_slovak_ci | utf8mb4 |
  20. | utf8mb4_spanish2_ci | utf8mb4 |
  21. | utf8mb4_roman_ci | utf8mb4 |
  22. | utf8mb4_persian_ci | utf8mb4 |
  23. | utf8mb4_esperanto_ci | utf8mb4 |
  24. | utf8mb4_hungarian_ci | utf8mb4 |
  25. | utf8mb4_sinhala_ci | utf8mb4 |
  26. | utf8mb4_german2_ci | utf8mb4 |
  27. | utf8mb4_croatian_ci | utf8mb4 |
  28. | utf8mb4_unicode_520_ci | utf8mb4 |
  29. | utf8mb4_vietnamese_ci | utf8mb4 |
  30. +------------------------+--------------------+
  31. 26 rows in set (0.00 sec)

COLUMNS 表

COLUMNS 表提供了表的所有列的信息。

  1. CREATE TABLE test.t1 (a int);
  1. 1 row in set (0.01 sec)
  1. SELECT * FROM information_schema.columns WHERE table_schema='test' AND TABLE_NAME='t1';
  1. *************************** 1. row ***************************
  2. TABLE_CATALOG: def
  3. TABLE_SCHEMA: test
  4. TABLE_NAME: t1
  5. COLUMN_NAME: a
  6. ORDINAL_POSITION: 1
  7. COLUMN_DEFAULT: NULL
  8. IS_NULLABLE: YES
  9. DATA_TYPE: int
  10. CHARACTER_MAXIMUM_LENGTH: NULL
  11. CHARACTER_OCTET_LENGTH: NULL
  12. NUMERIC_PRECISION: 11
  13. NUMERIC_SCALE: 0
  14. DATETIME_PRECISION: NULL
  15. CHARACTER_SET_NAME: NULL
  16. COLLATION_NAME: NULL
  17. COLUMN_TYPE: int(11)
  18. COLUMN_KEY:
  19. EXTRA:
  20. PRIVILEGES: select,insert,update,references
  21. COLUMN_COMMENT:
  22. GENERATION_EXPRESSION:
  23. 1 row in set (0.01 sec)

对应的 SHOW 语句如下:

  1. SHOW COLUMNS FROM t1 FROM test;
  1. +-------+---------+------+------+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +-------+---------+------+------+---------+-------+
  4. | a | int(11) | YES | | NULL | |
  5. +-------+---------+------+------+---------+-------+
  6. 1 row in set (0.00 sec)

ENGINES 表

ENGINES 表提供了关于存储引擎的信息。从和 MySQL 兼容性上考虑,TiDB 会一直将 InnoDB 描述为唯一支持的引擎。

  1. SELECT * FROM engines;
  1. *************************** 1. row ***************************
  2. ENGINE: InnoDB
  3. SUPPORT: DEFAULT
  4. COMMENT: Supports transactions, row-level locking, and foreign keys
  5. TRANSACTIONS: YES
  6. XA: YES
  7. SAVEPOINTS: YES
  8. 1 row in set (0.00 sec)

KEY_COLUMN_USAGE 表

KEY_COLUMN_USAGE 表描述了列的键约束,比如主键约束。

  1. SELECT * FROM key_column_usage WHERE table_schema='mysql' and table_name='user';
  1. *************************** 1. row ***************************
  2. CONSTRAINT_CATALOG: def
  3. CONSTRAINT_SCHEMA: mysql
  4. CONSTRAINT_NAME: PRIMARY
  5. TABLE_CATALOG: def
  6. TABLE_SCHEMA: mysql
  7. TABLE_NAME: user
  8. COLUMN_NAME: Host
  9. ORDINAL_POSITION: 1
  10. POSITION_IN_UNIQUE_CONSTRAINT: NULL
  11. REFERENCED_TABLE_SCHEMA: NULL
  12. REFERENCED_TABLE_NAME: NULL
  13. REFERENCED_COLUMN_NAME: NULL
  14. *************************** 2. row ***************************
  15. CONSTRAINT_CATALOG: def
  16. CONSTRAINT_SCHEMA: mysql
  17. CONSTRAINT_NAME: PRIMARY
  18. TABLE_CATALOG: def
  19. TABLE_SCHEMA: mysql
  20. TABLE_NAME: user
  21. COLUMN_NAME: User
  22. ORDINAL_POSITION: 2
  23. POSITION_IN_UNIQUE_CONSTRAINT: NULL
  24. REFERENCED_TABLE_SCHEMA: NULL
  25. REFERENCED_TABLE_NAME: NULL
  26. REFERENCED_COLUMN_NAME: NULL
  27. 2 rows in set (0.00 sec)

PROCESSLIST 表

PROCESSLISTshow processlist 的功能一样,都是查看当前正在处理的请求。

PROCESSLIST 表会比 show processlist 多一个 MEM 列,MEM 是指正在处理的请求已使用的内存,单位是 byte。

  1. +----+------+------+--------------------+---------+------+-------+---------------------------+-----+
  2. | ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | MEM |
  3. +----+------+------+--------------------+---------+------+-------+---------------------------+-----+
  4. | 1 | root | ::1 | INFORMATION_SCHEMA | Query | 0 | 2 | select * from PROCESSLIST | 0 |
  5. +----+------+------+--------------------+---------+------+-------+---------------------------+-----+

SCHEMATA 表

SCHEMATA 表提供了关于数据库的信息。表中的数据与 SHOW DATABASES 语句的执行结果等价。

  1. SELECT * FROM schemata;
  1. +--------------+--------------------+----------------------------+------------------------+----------+
  2. | CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
  3. +--------------+--------------------+----------------------------+------------------------+----------+
  4. | def | INFORMATION_SCHEMA | utf8mb4 | utf8mb4_bin | NULL |
  5. | def | mynewdb | utf8mb4 | utf8mb4_bin | NULL |
  6. | def | mysql | utf8mb4 | utf8mb4_bin | NULL |
  7. | def | PERFORMANCE_SCHEMA | utf8mb4 | utf8mb4_bin | NULL |
  8. | def | test | utf8mb4 | utf8mb4_bin | NULL |
  9. +--------------+--------------------+----------------------------+------------------------+----------+
  10. 5 rows in set (0.00 sec)

CLUSTER_PROCESSLIST

CLUSTER_PROCESSLISTPROCESSLIST 对应的集群系统表,用于查询集群中所有 TiDB 节点的 PROCESSLIST 信息。表结构上比 PROCESSLIST 多一列 INSTANCE,表示该行数据来自的 TiDB 节点地址。

  1. SELECT * FROM information_schema.cluster_processlist;
  1. +-----------------+-----+------+----------+------+---------+------+------------+------------------------------------------------------+-----+----------------------------------------+
  2. | INSTANCE | ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | MEM | TxnStart |
  3. +-----------------+-----+------+----------+------+---------+------+------------+------------------------------------------------------+-----+----------------------------------------+
  4. | 10.0.1.22:10080 | 150 | u1 | 10.0.1.1 | test | Query | 0 | autocommit | select count(*) from usertable | 372 | 05-28 03:54:21.230(416976223923077223) |
  5. | 10.0.1.22:10080 | 138 | root | 10.0.1.1 | test | Query | 0 | autocommit | SELECT * FROM information_schema.cluster_processlist | 0 | 05-28 03:54:21.230(416976223923077220) |
  6. | 10.0.1.22:10080 | 151 | u1 | 10.0.1.1 | test | Query | 0 | autocommit | select count(*) from usertable | 372 | 05-28 03:54:21.230(416976223923077224) |
  7. | 10.0.1.21:10080 | 15 | u2 | 10.0.1.1 | test | Query | 0 | autocommit | select max(field0) from usertable | 496 | 05-28 03:54:21.230(416976223923077222) |
  8. | 10.0.1.21:10080 | 14 | u2 | 10.0.1.1 | test | Query | 0 | autocommit | select max(field0) from usertable | 496 | 05-28 03:54:21.230(416976223923077225) |
  9. +-----------------+-----+------+----------+------+---------+------+------------+------------------------------------------------------+-----+----------------------------------------+

SESSION_VARIABLES 表

SESSION_VARIABLES 表提供了关于 session 变量的信息。表中的数据跟 SHOW SESSION VARIABLES 语句执行结果类似。

  1. SELECT * FROM session_variables LIMIT 10;
  1. +----------------------------------+----------------------+
  2. | VARIABLE_NAME | VARIABLE_VALUE |
  3. +----------------------------------+----------------------+
  4. | max_write_lock_count | 18446744073709551615 |
  5. | server_id_bits | 32 |
  6. | net_read_timeout | 30 |
  7. | innodb_online_alter_log_max_size | 134217728 |
  8. | innodb_optimize_fulltext_only | OFF |
  9. | max_join_size | 18446744073709551615 |
  10. | innodb_read_io_threads | 4 |
  11. | session_track_gtids | OFF |
  12. | have_ssl | DISABLED |
  13. | max_binlog_cache_size | 18446744073709547520 |
  14. +----------------------------------+----------------------+
  15. 10 rows in set (0.00 sec)

SLOW_QUERY 表

SLOW_QUERY 表中提供了当前节点的慢查询相关的信息,其内容通过解析当前节点的 TiDB 慢查询日志而来,列名和慢日志中的字段名是一一对应。关于如何使用该表调查和改善慢查询请参考慢查询日志文档

  1. desc information_schema.slow_query;
  1. +---------------------------+---------------------+------+-----+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +---------------------------+---------------------+------+-----+---------+-------+
  4. | Time | timestamp unsigned | YES | | <null> | |
  5. | Txn_start_ts | bigint(20) unsigned | YES | | <null> | |
  6. | User | varchar(64) | YES | | <null> | |
  7. | Host | varchar(64) | YES | | <null> | |
  8. | Conn_ID | bigint(20) unsigned | YES | | <null> | |
  9. | Query_time | double unsigned | YES | | <null> | |
  10. | Parse_time | double unsigned | YES | | <null> | |
  11. | Compile_time | double unsigned | YES | | <null> | |
  12. | Prewrite_time | double unsigned | YES | | <null> | |
  13. | Wait_prewrite_binlog_time | double unsigned | YES | | <null> | |
  14. | Commit_time | double unsigned | YES | | <null> | |
  15. | Get_commit_ts_time | double unsigned | YES | | <null> | |
  16. | Commit_backoff_time | double unsigned | YES | | <null> | |
  17. | Backoff_types | varchar(64) | YES | | <null> | |
  18. | Resolve_lock_time | double unsigned | YES | | <null> | |
  19. | Local_latch_wait_time | double unsigned | YES | | <null> | |
  20. | Write_keys | bigint(22) unsigned | YES | | <null> | |
  21. | Write_size | bigint(22) unsigned | YES | | <null> | |
  22. | Prewrite_region | bigint(22) unsigned | YES | | <null> | |
  23. | Txn_retry | bigint(22) unsigned | YES | | <null> | |
  24. | Process_time | double unsigned | YES | | <null> | |
  25. | Wait_time | double unsigned | YES | | <null> | |
  26. | Backoff_time | double unsigned | YES | | <null> | |
  27. | LockKeys_time | double unsigned | YES | | <null> | |
  28. | Request_count | bigint(20) unsigned | YES | | <null> | |
  29. | Total_keys | bigint(20) unsigned | YES | | <null> | |
  30. | Process_keys | bigint(20) unsigned | YES | | <null> | |
  31. | DB | varchar(64) | YES | | <null> | |
  32. | Index_names | varchar(100) | YES | | <null> | |
  33. | Is_internal | tinyint(1) unsigned | YES | | <null> | |
  34. | Digest | varchar(64) | YES | | <null> | |
  35. | Stats | varchar(512) | YES | | <null> | |
  36. | Cop_proc_avg | double unsigned | YES | | <null> | |
  37. | Cop_proc_p90 | double unsigned | YES | | <null> | |
  38. | Cop_proc_max | double unsigned | YES | | <null> | |
  39. | Cop_proc_addr | varchar(64) | YES | | <null> | |
  40. | Cop_wait_avg | double unsigned | YES | | <null> | |
  41. | Cop_wait_p90 | double unsigned | YES | | <null> | |
  42. | Cop_wait_max | double unsigned | YES | | <null> | |
  43. | Cop_wait_addr | varchar(64) | YES | | <null> | |
  44. | Mem_max | bigint(20) unsigned | YES | | <null> | |
  45. | Succ | tinyint(1) unsigned | YES | | <null> | |
  46. | Plan_from_cache | tinyint(1) | YES | | <null> | |
  47. | Plan | longblob unsigned | YES | | <null> | |
  48. | Plan_digest | varchar(128) | YES | | <null> | |
  49. | Prev_stmt | longblob unsigned | YES | | <null> | |
  50. | Query | longblob unsigned | YES | | <null> | |
  51. +---------------------------+---------------------+------+-----+---------+-------+

CLUSTER_SLOW_QUERY 表

CLUSTER_SLOW_QUERY 表中提供了集群所有节点的慢查询相关的信息,其内容通过解析 TiDB 慢查询日志而来,该表使用上和 SLOW_QUERY 一样,表结构上比 SLOW_QUERY 多一列 INSTANCE,表示该行慢查询信息来自的 TiDB 节点地址。关于如何使用该表调查和改善慢查询请参考慢查询日志文档

  1. desc information_schema.cluster_slow_query;
  1. +---------------------------+---------------------+------+-----+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +---------------------------+---------------------+------+-----+---------+-------+
  4. | INSTANCE | varchar(64) | YES | | <null> | |
  5. | Time | timestamp unsigned | YES | | <null> | |
  6. | Txn_start_ts | bigint(20) unsigned | YES | | <null> | |
  7. | User | varchar(64) | YES | | <null> | |
  8. | Host | varchar(64) | YES | | <null> | |
  9. | Conn_ID | bigint(20) unsigned | YES | | <null> | |
  10. | Query_time | double unsigned | YES | | <null> | |
  11. | Parse_time | double unsigned | YES | | <null> | |
  12. | Compile_time | double unsigned | YES | | <null> | |
  13. | Prewrite_time | double unsigned | YES | | <null> | |
  14. | Wait_prewrite_binlog_time | double unsigned | YES | | <null> | |
  15. | Commit_time | double unsigned | YES | | <null> | |
  16. | Get_commit_ts_time | double unsigned | YES | | <null> | |
  17. | Commit_backoff_time | double unsigned | YES | | <null> | |
  18. | Backoff_types | varchar(64) | YES | | <null> | |
  19. | Resolve_lock_time | double unsigned | YES | | <null> | |
  20. | Local_latch_wait_time | double unsigned | YES | | <null> | |
  21. | Write_keys | bigint(22) unsigned | YES | | <null> | |
  22. | Write_size | bigint(22) unsigned | YES | | <null> | |
  23. | Prewrite_region | bigint(22) unsigned | YES | | <null> | |
  24. | Txn_retry | bigint(22) unsigned | YES | | <null> | |
  25. | Process_time | double unsigned | YES | | <null> | |
  26. | Wait_time | double unsigned | YES | | <null> | |
  27. | Backoff_time | double unsigned | YES | | <null> | |
  28. | LockKeys_time | double unsigned | YES | | <null> | |
  29. | Request_count | bigint(20) unsigned | YES | | <null> | |
  30. | Total_keys | bigint(20) unsigned | YES | | <null> | |
  31. | Process_keys | bigint(20) unsigned | YES | | <null> | |
  32. | DB | varchar(64) | YES | | <null> | |
  33. | Index_names | varchar(100) | YES | | <null> | |
  34. | Is_internal | tinyint(1) unsigned | YES | | <null> | |
  35. | Digest | varchar(64) | YES | | <null> | |
  36. | Stats | varchar(512) | YES | | <null> | |
  37. | Cop_proc_avg | double unsigned | YES | | <null> | |
  38. | Cop_proc_p90 | double unsigned | YES | | <null> | |
  39. | Cop_proc_max | double unsigned | YES | | <null> | |
  40. | Cop_proc_addr | varchar(64) | YES | | <null> | |
  41. | Cop_wait_avg | double unsigned | YES | | <null> | |
  42. | Cop_wait_p90 | double unsigned | YES | | <null> | |
  43. | Cop_wait_max | double unsigned | YES | | <null> | |
  44. | Cop_wait_addr | varchar(64) | YES | | <null> | |
  45. | Mem_max | bigint(20) unsigned | YES | | <null> | |
  46. | Succ | tinyint(1) unsigned | YES | | <null> | |
  47. | Plan_from_cache | tinyint(1) | YES | | <null> | |
  48. | Plan | longblob unsigned | YES | | <null> | |
  49. | Plan_digest | varchar(128) | YES | | <null> | |
  50. | Prev_stmt | longblob unsigned | YES | | <null> | |
  51. | Query | longblob unsigned | YES | | <null> | |
  52. +---------------------------+---------------------+------+-----+---------+-------+

查询集群系统表时,TiDB 也会将相关计算下推给其他节点执行,而不是把所有节点的数据都取回来,可以查看执行计划如下:

  1. desc select count(*) from information_schema.cluster_slow_query where user = 'u1';
  1. +--------------------------+----------+-----------+--------------------------+------------------------------------------------------+
  2. | id | estRows | task | access object | operator info |
  3. +--------------------------+----------+-----------+--------------------------+------------------------------------------------------+
  4. | StreamAgg_20 | 1.00 | root | | funcs:count(Column#53)->Column#51 |
  5. | └─TableReader_21 | 1.00 | root | | data:StreamAgg_9 |
  6. | └─StreamAgg_9 | 1.00 | cop[tidb] | | funcs:count(1)->Column#53 |
  7. | └─Selection_19 | 10.00 | cop[tidb] | | eq(information_schema.cluster_slow_query.user, "u1") |
  8. | └─TableFullScan_18 | 10000.00 | cop[tidb] | table:CLUSTER_SLOW_QUERY | keep order:false, stats:pseudo |
  9. +--------------------------+----------+-----------+--------------------------+------------------------------------------------------+

上面执行计划表示,会将 user = u1 条件下推给其他的 (cop) TiDB 节点执行,也会把聚合算子下推(即图中的 StreamAgg 算子)。

目前由于没有对系统表收集统计信息,所以有时会导致某些聚合算子不能下推,导致执行较慢,用户可以通过手动指定聚合下推的 SQL HINT 来将聚合算子下推,示例如下:

  1. select /*+ AGG_TO_COP() */ count(*) from information_schema.cluster_slow_query group by user;

STATISTICS 表

STATISTICS 表提供了关于表索引的信息。

  1. desc statistics;
  1. +---------------|---------------------|------|------|---------|-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +---------------|---------------------|------|------|---------|-------+
  4. | TABLE_CATALOG | varchar(512) | YES | | NULL | |
  5. | TABLE_SCHEMA | varchar(64) | YES | | NULL | |
  6. | TABLE_NAME | varchar(64) | YES | | NULL | |
  7. | NON_UNIQUE | varchar(1) | YES | | NULL | |
  8. | INDEX_SCHEMA | varchar(64) | YES | | NULL | |
  9. | INDEX_NAME | varchar(64) | YES | | NULL | |
  10. | SEQ_IN_INDEX | bigint(2) UNSIGNED | YES | | NULL | |
  11. | COLUMN_NAME | varchar(21) | YES | | NULL | |
  12. | COLLATION | varchar(1) | YES | | NULL | |
  13. | CARDINALITY | bigint(21) UNSIGNED | YES | | NULL | |
  14. | SUB_PART | bigint(3) UNSIGNED | YES | | NULL | |
  15. | PACKED | varchar(10) | YES | | NULL | |
  16. | NULLABLE | varchar(3) | YES | | NULL | |
  17. | INDEX_TYPE | varchar(16) | YES | | NULL | |
  18. | COMMENT | varchar(16) | YES | | NULL | |
  19. | INDEX_COMMENT | varchar(1024) | YES | | NULL | |
  20. +---------------|---------------------|------|------|---------|-------+

下列语句是等价的:

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

TABLES 表

TABLES 表提供了数据库里面关于表的信息。

  1. SELECT * FROM tables WHERE table_schema='mysql' AND table_name='user';
  1. *************************** 1. row ***************************
  2. TABLE_CATALOG: def
  3. TABLE_SCHEMA: mysql
  4. TABLE_NAME: user
  5. TABLE_TYPE: BASE TABLE
  6. ENGINE: InnoDB
  7. VERSION: 10
  8. ROW_FORMAT: Compact
  9. TABLE_ROWS: 0
  10. AVG_ROW_LENGTH: 0
  11. DATA_LENGTH: 0
  12. MAX_DATA_LENGTH: 0
  13. INDEX_LENGTH: 0
  14. DATA_FREE: 0
  15. AUTO_INCREMENT: 0
  16. CREATE_TIME: 2019-03-29 09:17:27
  17. UPDATE_TIME: NULL
  18. CHECK_TIME: NULL
  19. TABLE_COLLATION: utf8mb4_bin
  20. CHECKSUM: NULL
  21. CREATE_OPTIONS:
  22. TABLE_COMMENT:
  23. TIDB_TABLE_ID: 5
  24. TIDB_ROW_ID_SHARDING_INFO: NULL
  25. 1 row in set (0.00 sec)

以下操作是等价的:

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

表中的信息大部分定义自 MySQL,此外有两列是 TiDB 新增的:

  • TIDB_TABLE_ID:标识表的内部 ID,该 ID 在一个 TiDB 集群内部唯一。
  • TIDB_ROW_ID_SHARDING_INFO:标识表的 Sharding 类型,可能的值为:
    • "NOT_SHARDED":表未被 Shard。
    • "NOT_SHARDED(PK_IS_HANDLE)":一个定义了整型主键的表未被 Shard。
    • "PK_AUTO_RANDOM_BITS={bit_number}":一个定义了整型主键的表由于定义了 AUTO_RANDOM 而被 Shard。
    • "SHARD_BITS={bit_number}":表使用 SHARD_ROW_ID_BITS={bit_number} 进行了 Shard。
    • NULL:表属于系统表或 View,无法被 Shard。

TABLE_CONSTRAINTS 表

TABLE_CONSTRAINTS 表记录了表的约束信息。

  1. SELECT * FROM table_constraints WHERE constraint_type='UNIQUE';
  1. *************************** 1. row ***************************
  2. CONSTRAINT_CATALOG: def
  3. CONSTRAINT_SCHEMA: mysql
  4. CONSTRAINT_NAME: name
  5. TABLE_SCHEMA: mysql
  6. TABLE_NAME: help_topic
  7. CONSTRAINT_TYPE: UNIQUE
  8. *************************** 2. row ***************************
  9. CONSTRAINT_CATALOG: def
  10. CONSTRAINT_SCHEMA: mysql
  11. CONSTRAINT_NAME: tbl
  12. TABLE_SCHEMA: mysql
  13. TABLE_NAME: stats_meta
  14. CONSTRAINT_TYPE: UNIQUE
  15. *************************** 3. row ***************************
  16. CONSTRAINT_CATALOG: def
  17. CONSTRAINT_SCHEMA: mysql
  18. CONSTRAINT_NAME: tbl
  19. TABLE_SCHEMA: mysql
  20. TABLE_NAME: stats_histograms
  21. CONSTRAINT_TYPE: UNIQUE
  22. *************************** 4. row ***************************
  23. CONSTRAINT_CATALOG: def
  24. CONSTRAINT_SCHEMA: mysql
  25. CONSTRAINT_NAME: tbl
  26. TABLE_SCHEMA: mysql
  27. TABLE_NAME: stats_buckets
  28. CONSTRAINT_TYPE: UNIQUE
  29. *************************** 5. row ***************************
  30. CONSTRAINT_CATALOG: def
  31. CONSTRAINT_SCHEMA: mysql
  32. CONSTRAINT_NAME: delete_range_index
  33. TABLE_SCHEMA: mysql
  34. TABLE_NAME: gc_delete_range
  35. CONSTRAINT_TYPE: UNIQUE
  36. *************************** 6. row ***************************
  37. CONSTRAINT_CATALOG: def
  38. CONSTRAINT_SCHEMA: mysql
  39. CONSTRAINT_NAME: delete_range_done_index
  40. TABLE_SCHEMA: mysql
  41. TABLE_NAME: gc_delete_range_done
  42. CONSTRAINT_TYPE: UNIQUE

其中:

  • CONSTRAINT_TYPE 的取值可以是 UNIQUEPRIMARY KEY,或者 FOREIGN KEY
  • UNIQUEPRIMARY KEY 信息与 SHOW INDEX 语句的执行结果类似。

TIDB_HOT_REGIONS 表

TIDB_HOT_REGIONS 表提供了关于热点 REGION 的相关信息。

  1. desc TIDB_HOT_REGIONS;
  1. +----------------+---------------------+------+-----+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +----------------+---------------------+------+-----+---------+-------+
  4. | TABLE_ID | bigint(21) unsigned | YES | | <null> | |
  5. | INDEX_ID | bigint(21) unsigned | YES | | <null> | |
  6. | DB_NAME | varchar(64) | YES | | <null> | |
  7. | TABLE_NAME | varchar(64) | YES | | <null> | |
  8. | INDEX_NAME | varchar(64) | YES | | <null> | |
  9. | TYPE | varchar(64) | YES | | <null> | |
  10. | MAX_HOT_DEGREE | bigint(21) unsigned | YES | | <null> | |
  11. | REGION_COUNT | bigint(21) unsigned | YES | | <null> | |
  12. | FLOW_BYTES | bigint(21) unsigned | YES | | <null> | |
  13. +----------------+---------------------+------+-----+---------+-------+

TIDB_INDEXES 表

TIDB_INDEXES 记录了所有表中的 INDEX 信息。

  1. desc TIDB_INDEXES;
  1. +---------------+---------------------+------+-----+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +---------------+---------------------+------+-----+---------+-------+
  4. | TABLE_SCHEMA | varchar(64) | YES | | <null> | |
  5. | TABLE_NAME | varchar(64) | YES | | <null> | |
  6. | NON_UNIQUE | bigint(21) unsigned | YES | | <null> | |
  7. | KEY_NAME | varchar(64) | YES | | <null> | |
  8. | SEQ_IN_INDEX | bigint(21) unsigned | YES | | <null> | |
  9. | COLUMN_NAME | varchar(64) | YES | | <null> | |
  10. | SUB_PART | bigint(21) unsigned | YES | | <null> | |
  11. | INDEX_COMMENT | varchar(2048) | YES | | <null> | |
  12. | INDEX_ID | bigint(21) unsigned | YES | | <null> | |
  13. +---------------+---------------------+------+-----+---------+-------+

TIKV_REGION_PEERS 表

TIKV_REGION_PEERS 表提供了所有 REGION 的 peer 信息。

  1. desc TIKV_REGION_PEERS;
  1. +--------------+---------------------+------+-----+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +--------------+---------------------+------+-----+---------+-------+
  4. | REGION_ID | bigint(21) unsigned | YES | | <null> | |
  5. | PEER_ID | bigint(21) unsigned | YES | | <null> | |
  6. | STORE_ID | bigint(21) unsigned | YES | | <null> | |
  7. | IS_LEARNER | tinyint(1) unsigned | YES | | <null> | |
  8. | IS_LEADER | tinyint(1) unsigned | YES | | <null> | |
  9. | STATUS | varchar(10) | YES | | <null> | |
  10. | DOWN_SECONDS | bigint(21) unsigned | YES | | <null> | |
  11. +--------------+---------------------+------+-----+---------+-------+

TIKV_REGION_STATUS 表

TIKV_REGION_STATUS 表提供了所有 REGION 的状态信息。

  1. desc TIKV_REGION_STATUS;
  1. +------------------+---------------------+------+-----+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +------------------+---------------------+------+-----+---------+-------+
  4. | REGION_ID | bigint(21) unsigned | YES | | <null> | |
  5. | START_KEY | text | YES | | <null> | |
  6. | END_KEY | text | YES | | <null> | |
  7. | EPOCH_CONF_VER | bigint(21) unsigned | YES | | <null> | |
  8. | EPOCH_VERSION | bigint(21) unsigned | YES | | <null> | |
  9. | WRITTEN_BYTES | bigint(21) unsigned | YES | | <null> | |
  10. | READ_BYTES | bigint(21) unsigned | YES | | <null> | |
  11. | APPROXIMATE_SIZE | bigint(21) unsigned | YES | | <null> | |
  12. | APPROXIMATE_KEYS | bigint(21) unsigned | YES | | <null> | |
  13. +------------------+---------------------+------+-----+---------+-------+

TIKV_STORE_STATUS 表

TIKV_STORE_STATUS 表提供了所有 TiKV Store 的状态信息。

  1. desc TIKV_STORE_STATUS;
  1. +-------------------+---------------------+------+-----+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +-------------------+---------------------+------+-----+---------+-------+
  4. | STORE_ID | bigint(21) unsigned | YES | | <null> | |
  5. | ADDRESS | varchar(64) | YES | | <null> | |
  6. | STORE_STATE | bigint(21) unsigned | YES | | <null> | |
  7. | STORE_STATE_NAME | varchar(64) | YES | | <null> | |
  8. | LABEL | json unsigned | YES | | <null> | |
  9. | VERSION | varchar(64) | YES | | <null> | |
  10. | CAPACITY | varchar(64) | YES | | <null> | |
  11. | AVAILABLE | varchar(64) | YES | | <null> | |
  12. | LEADER_COUNT | bigint(21) unsigned | YES | | <null> | |
  13. | LEADER_WEIGHT | bigint(21) unsigned | YES | | <null> | |
  14. | LEADER_SCORE | bigint(21) unsigned | YES | | <null> | |
  15. | LEADER_SIZE | bigint(21) unsigned | YES | | <null> | |
  16. | REGION_COUNT | bigint(21) unsigned | YES | | <null> | |
  17. | REGION_WEIGHT | bigint(21) unsigned | YES | | <null> | |
  18. | REGION_SCORE | bigint(21) unsigned | YES | | <null> | |
  19. | REGION_SIZE | bigint(21) unsigned | YES | | <null> | |
  20. | START_TS | datetime unsigned | YES | | <null> | |
  21. | LAST_HEARTBEAT_TS | datetime unsigned | YES | | <null> | |
  22. | UPTIME | varchar(64) | YES | | <null> | |
  23. +-------------------+---------------------+------+-----+---------+-------+

USER_PRIVILEGES 表

USER_PRIVILEGES 表提供了关于全局权限的信息。该表的数据根据 mysql.user 系统表生成。

  1. desc USER_PRIVILEGES;
  1. +----------------|--------------|------|------|---------|-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +----------------|--------------|------|------|---------|-------+
  4. | GRANTEE | varchar(81) | YES | | NULL | |
  5. | TABLE_CATALOG | varchar(512) | YES | | NULL | |
  6. | PRIVILEGE_TYPE | varchar(64) | YES | | NULL | |
  7. | IS_GRANTABLE | varchar(3) | YES | | NULL | |
  8. +----------------|--------------|------|------|---------|-------+
  9. 4 rows in set (0.00 sec)

VIEWS 表

VIEWS 表提供了关于 SQL 视图的信息。

  1. create view test.v1 as select 1;
  1. Query OK, 0 rows affected (0.00 sec)
  1. select * from views;
  1. *************************** 1. row ***************************
  2. TABLE_CATALOG: def
  3. TABLE_SCHEMA: test
  4. TABLE_NAME: v1
  5. VIEW_DEFINITION: select 1
  6. CHECK_OPTION: CASCADED
  7. IS_UPDATABLE: NO
  8. DEFINER: root@127.0.0.1
  9. SECURITY_TYPE: DEFINER
  10. CHARACTER_SET_CLIENT: utf8
  11. COLLATION_CONNECTION: utf8_general_ci
  12. 1 row in set (0.00 sec)

SQL 诊断相关的表

不支持的 Information Schema 表

TiDB 包含以下 INFORMATION_SCHEMA 表,但仅会返回空行:

  • COLUMN_PRIVILEGES
  • EVENTS
  • FILES
  • GLOBAL_STATUS
  • GLOBAL_VARIABLES
  • OPTIMIZER_TRACE
  • PARAMETERS
  • PARTITIONS
  • PLUGINS
  • PROFILING
  • REFERENTIAL_CONSTRAINTS
  • ROUTINES
  • SCHEMA_PRIVILEGES
  • SESSION_STATUS
  • TABLESPACES
  • TABLE_PRIVILEGES
  • TRIGGERS