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;