SLOW_QUERY

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

  1. USE information_schema;
  2. DESC slow_query;
  1. +---------------------------+---------------------+------+------+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +---------------------------+---------------------+------+------+---------+-------+
  4. | Time | timestamp(6) | 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 | YES | | NULL | |
  10. | Parse_time | double | YES | | NULL | |
  11. | Compile_time | double | YES | | NULL | |
  12. | Rewrite_time | double | YES | | NULL | |
  13. | Preproc_subqueries | bigint(20) unsigned | YES | | NULL | |
  14. | Preproc_subqueries_time | double | YES | | NULL | |
  15. | Optimize_time | double | YES | | NULL | |
  16. | Wait_TS | double | YES | | NULL | |
  17. | Prewrite_time | double | YES | | NULL | |
  18. | Wait_prewrite_binlog_time | double | YES | | NULL | |
  19. | Commit_time | double | YES | | NULL | |
  20. | Get_commit_ts_time | double | YES | | NULL | |
  21. | Commit_backoff_time | double | YES | | NULL | |
  22. | Backoff_types | varchar(64) | YES | | NULL | |
  23. | Resolve_lock_time | double | YES | | NULL | |
  24. | Local_latch_wait_time | double | YES | | NULL | |
  25. | Write_keys | bigint(22) | YES | | NULL | |
  26. | Write_size | bigint(22) | YES | | NULL | |
  27. | Prewrite_region | bigint(22) | YES | | NULL | |
  28. | Txn_retry | bigint(22) | YES | | NULL | |
  29. | Cop_time | double | YES | | NULL | |
  30. | Process_time | double | YES | | NULL | |
  31. | Wait_time | double | YES | | NULL | |
  32. | Backoff_time | double | YES | | NULL | |
  33. | LockKeys_time | double | YES | | NULL | |
  34. | Request_count | bigint(20) unsigned | YES | | NULL | |
  35. | Total_keys | bigint(20) unsigned | YES | | NULL | |
  36. | Process_keys | bigint(20) unsigned | YES | | NULL | |
  37. | DB | varchar(64) | YES | | NULL | |
  38. | Index_names | varchar(100) | YES | | NULL | |
  39. | Is_internal | tinyint(1) | YES | | NULL | |
  40. | Digest | varchar(64) | YES | | NULL | |
  41. | Stats | varchar(512) | YES | | NULL | |
  42. | Cop_proc_avg | double | YES | | NULL | |
  43. | Cop_proc_p90 | double | YES | | NULL | |
  44. | Cop_proc_max | double | YES | | NULL | |
  45. | Cop_proc_addr | varchar(64) | YES | | NULL | |
  46. | Cop_wait_avg | double | YES | | NULL | |
  47. | Cop_wait_p90 | double | YES | | NULL | |
  48. | Cop_wait_max | double | YES | | NULL | |
  49. | Cop_wait_addr | varchar(64) | YES | | NULL | |
  50. | Mem_max | bigint(20) | YES | | NULL | |
  51. | Disk_max | bigint(20) | YES | | NULL | |
  52. | Succ | tinyint(1) | YES | | NULL | |
  53. | Plan_from_cache | tinyint(1) | YES | | NULL | |
  54. | Plan | longblob | YES | | NULL | |
  55. | Plan_digest | varchar(128) | YES | | NULL | |
  56. | Prev_stmt | longblob | YES | | NULL | |
  57. | Query | longblob | YES | | NULL | |
  58. +---------------------------+---------------------+------+------+---------+-------+
  59. 54 rows in set (0.00 sec)

CLUSTER_SLOW_QUERY table

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

  1. desc cluster_slow_query;
  1. +---------------------------+---------------------+------+------+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +---------------------------+---------------------+------+------+---------+-------+
  4. | INSTANCE | varchar(64) | YES | | NULL | |
  5. | Time | timestamp(6) | 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 | YES | | NULL | |
  11. | Parse_time | double | YES | | NULL | |
  12. | Compile_time | double | YES | | NULL | |
  13. | Rewrite_time | double | YES | | NULL | |
  14. | Preproc_subqueries | bigint(20) unsigned | YES | | NULL | |
  15. | Preproc_subqueries_time | double | YES | | NULL | |
  16. | Optimize_time | double | YES | | NULL | |
  17. | Wait_TS | double | YES | | NULL | |
  18. | Prewrite_time | double | YES | | NULL | |
  19. | Wait_prewrite_binlog_time | double | YES | | NULL | |
  20. | Commit_time | double | YES | | NULL | |
  21. | Get_commit_ts_time | double | YES | | NULL | |
  22. | Commit_backoff_time | double | YES | | NULL | |
  23. | Backoff_types | varchar(64) | YES | | NULL | |
  24. | Resolve_lock_time | double | YES | | NULL | |
  25. | Local_latch_wait_time | double | YES | | NULL | |
  26. | Write_keys | bigint(22) | YES | | NULL | |
  27. | Write_size | bigint(22) | YES | | NULL | |
  28. | Prewrite_region | bigint(22) | YES | | NULL | |
  29. | Txn_retry | bigint(22) | YES | | NULL | |
  30. | Cop_time | double | YES | | NULL | |
  31. | Process_time | double | YES | | NULL | |
  32. | Wait_time | double | YES | | NULL | |
  33. | Backoff_time | double | YES | | NULL | |
  34. | LockKeys_time | double | YES | | NULL | |
  35. | Request_count | bigint(20) unsigned | YES | | NULL | |
  36. | Total_keys | bigint(20) unsigned | YES | | NULL | |
  37. | Process_keys | bigint(20) unsigned | YES | | NULL | |
  38. | DB | varchar(64) | YES | | NULL | |
  39. | Index_names | varchar(100) | YES | | NULL | |
  40. | Is_internal | tinyint(1) | YES | | NULL | |
  41. | Digest | varchar(64) | YES | | NULL | |
  42. | Stats | varchar(512) | YES | | NULL | |
  43. | Cop_proc_avg | double | YES | | NULL | |
  44. | Cop_proc_p90 | double | YES | | NULL | |
  45. | Cop_proc_max | double | YES | | NULL | |
  46. | Cop_proc_addr | varchar(64) | YES | | NULL | |
  47. | Cop_wait_avg | double | YES | | NULL | |
  48. | Cop_wait_p90 | double | YES | | NULL | |
  49. | Cop_wait_max | double | YES | | NULL | |
  50. | Cop_wait_addr | varchar(64) | YES | | NULL | |
  51. | Mem_max | bigint(20) | YES | | NULL | |
  52. | Disk_max | bigint(20) | YES | | NULL | |
  53. | Succ | tinyint(1) | YES | | NULL | |
  54. | Plan_from_cache | tinyint(1) | YES | | NULL | |
  55. | Plan | longblob | YES | | NULL | |
  56. | Plan_digest | varchar(128) | YES | | NULL | |
  57. | Prev_stmt | longblob | YES | | NULL | |
  58. | Query | longblob | YES | | NULL | |
  59. +---------------------------+---------------------+------+------+---------+-------+
  60. 55 rows in set (0.00 sec)

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

  1. desc SELECT count(*) FROM 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 cluster_slow_query GROUP BY user;