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;
