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)        | NO   | PRI  | 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. | Session_alias                 | varchar(64)         | YES  |      | NULL    |       |
10. | Exec_retry_count              | bigint(20) unsigned | YES  |      | NULL    |       |
11. | Exec_retry_time               | double              | YES  |      | NULL    |       |
12. | Query_time                    | double              | YES  |      | NULL    |       |
13. | Parse_time                    | double              | YES  |      | NULL    |       |
14. | Compile_time                  | double              | YES  |      | NULL    |       |
15. | Rewrite_time                  | double              | YES  |      | NULL    |       |
16. | Preproc_subqueries            | bigint(20) unsigned | YES  |      | NULL    |       |
17. | Preproc_subqueries_time       | double              | YES  |      | NULL    |       |
18. | Optimize_time                 | double              | YES  |      | NULL    |       |
19. | Wait_TS                       | double              | YES  |      | NULL    |       |
20. | Prewrite_time                 | double              | YES  |      | NULL    |       |
21. | Wait_prewrite_binlog_time     | double              | YES  |      | NULL    |       |
22. | Commit_time                   | double              | YES  |      | NULL    |       |
23. | Get_commit_ts_time            | double              | YES  |      | NULL    |       |
24. | Commit_backoff_time           | double              | YES  |      | NULL    |       |
25. | Backoff_types                 | varchar(64)         | YES  |      | NULL    |       |
26. | Resolve_lock_time             | double              | YES  |      | NULL    |       |
27. | Local_latch_wait_time         | double              | YES  |      | NULL    |       |
28. | Write_keys                    | bigint(22)          | YES  |      | NULL    |       |
29. | Write_size                    | bigint(22)          | YES  |      | NULL    |       |
30. | Prewrite_region               | bigint(22)          | YES  |      | NULL    |       |
31. | Txn_retry                     | bigint(22)          | YES  |      | NULL    |       |
32. | Cop_time                      | double              | YES  |      | NULL    |       |
33. | Process_time                  | double              | YES  |      | NULL    |       |
34. | Wait_time                     | double              | YES  |      | NULL    |       |
35. | Backoff_time                  | double              | YES  |      | NULL    |       |
36. | LockKeys_time                 | double              | YES  |      | NULL    |       |
37. | Request_count                 | bigint(20) unsigned | YES  |      | NULL    |       |
38. | Total_keys                    | bigint(20) unsigned | YES  |      | NULL    |       |
39. | Process_keys                  | bigint(20) unsigned | YES  |      | NULL    |       |
40. | Rocksdb_delete_skipped_count  | bigint(20) unsigned | YES  |      | NULL    |       |
41. | Rocksdb_key_skipped_count     | bigint(20) unsigned | YES  |      | NULL    |       |
42. | Rocksdb_block_cache_hit_count | bigint(20) unsigned | YES  |      | NULL    |       |
43. | Rocksdb_block_read_count      | bigint(20) unsigned | YES  |      | NULL    |       |
44. | Rocksdb_block_read_byte       | bigint(20) unsigned | YES  |      | NULL    |       |
45. | DB                            | varchar(64)         | YES  |      | NULL    |       |
46. | Index_names                   | varchar(100)        | YES  |      | NULL    |       |
47. | Is_internal                   | tinyint(1)          | YES  |      | NULL    |       |
48. | Digest                        | varchar(64)         | YES  |      | NULL    |       |
49. | Stats                         | varchar(512)        | YES  |      | NULL    |       |
50. | Cop_proc_avg                  | double              | YES  |      | NULL    |       |
51. | Cop_proc_p90                  | double              | YES  |      | NULL    |       |
52. | Cop_proc_max                  | double              | YES  |      | NULL    |       |
53. | Cop_proc_addr                 | varchar(64)         | YES  |      | NULL    |       |
54. | Cop_wait_avg                  | double              | YES  |      | NULL    |       |
55. | Cop_wait_p90                  | double              | YES  |      | NULL    |       |
56. | Cop_wait_max                  | double              | YES  |      | NULL    |       |
57. | Cop_wait_addr                 | varchar(64)         | YES  |      | NULL    |       |
58. | Mem_max                       | bigint(20)          | YES  |      | NULL    |       |
59. | Disk_max                      | bigint(20)          | YES  |      | NULL    |       |
60. | KV_total                      | double              | YES  |      | NULL    |       |
61. | PD_total                      | double              | YES  |      | NULL    |       |
62. | Backoff_total                 | double              | YES  |      | NULL    |       |
63. | Write_sql_response_total      | double              | YES  |      | NULL    |       |
64. | Result_rows                   | bigint(22)          | YES  |      | NULL    |       |
65. | Warnings                      | longtext            | YES  |      | NULL    |       |
66. | Backoff_Detail                | varchar(4096)       | YES  |      | NULL    |       |
67. | Prepared                      | tinyint(1)          | YES  |      | NULL    |       |
68. | Succ                          | tinyint(1)          | YES  |      | NULL    |       |
69. | IsExplicitTxn                 | tinyint(1)          | YES  |      | NULL    |       |
70. | IsWriteCacheTable             | tinyint(1)          | YES  |      | NULL    |       |
71. | Plan_from_cache               | tinyint(1)          | YES  |      | NULL    |       |
72. | Plan_from_binding             | tinyint(1)          | YES  |      | NULL    |       |
73. | Has_more_results              | tinyint(1)          | YES  |      | NULL    |       |
74. | Resource_group                | varchar(64)         | YES  |      | NULL    |       |
75. | Request_unit_read             | double              | YES  |      | NULL    |       |
76. | Request_unit_write            | double              | YES  |      | NULL    |       |
77. | Time_queued_by_rc             | double              | YES  |      | NULL    |       |
78. | Plan                          | longtext            | YES  |      | NULL    |       |
79. | Plan_digest                   | varchar(128)        | YES  |      | NULL    |       |
80. | Binary_plan                   | longtext            | YES  |      | NULL    |       |
81. | Prev_stmt                     | longtext            | YES  |      | NULL    |       |
82. | Query                         | longtext            | YES  |      | NULL    |       |
83. +-------------------------------+---------------------+------+------+---------+-------+
84. 79 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)        | NO   | PRI  | 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. | Session_alias                 | varchar(64)         | YES  |      | NULL    |       |
11. | Exec_retry_count              | bigint(20) unsigned | YES  |      | NULL    |       |
12. | Exec_retry_time               | double              | YES  |      | NULL    |       |
13. | Query_time                    | double              | YES  |      | NULL    |       |
14. | Parse_time                    | double              | YES  |      | NULL    |       |
15. | Compile_time                  | double              | YES  |      | NULL    |       |
16. | Rewrite_time                  | double              | YES  |      | NULL    |       |
17. | Preproc_subqueries            | bigint(20) unsigned | YES  |      | NULL    |       |
18. | Preproc_subqueries_time       | double              | YES  |      | NULL    |       |
19. | Optimize_time                 | double              | YES  |      | NULL    |       |
20. | Wait_TS                       | double              | YES  |      | NULL    |       |
21. | Prewrite_time                 | double              | YES  |      | NULL    |       |
22. | Wait_prewrite_binlog_time     | double              | YES  |      | NULL    |       |
23. | Commit_time                   | double              | YES  |      | NULL    |       |
24. | Get_commit_ts_time            | double              | YES  |      | NULL    |       |
25. | Commit_backoff_time           | double              | YES  |      | NULL    |       |
26. | Backoff_types                 | varchar(64)         | YES  |      | NULL    |       |
27. | Resolve_lock_time             | double              | YES  |      | NULL    |       |
28. | Local_latch_wait_time         | double              | YES  |      | NULL    |       |
29. | Write_keys                    | bigint(22)          | YES  |      | NULL    |       |
30. | Write_size                    | bigint(22)          | YES  |      | NULL    |       |
31. | Prewrite_region               | bigint(22)          | YES  |      | NULL    |       |
32. | Txn_retry                     | bigint(22)          | YES  |      | NULL    |       |
33. | Cop_time                      | double              | YES  |      | NULL    |       |
34. | Process_time                  | double              | YES  |      | NULL    |       |
35. | Wait_time                     | double              | YES  |      | NULL    |       |
36. | Backoff_time                  | double              | YES  |      | NULL    |       |
37. | LockKeys_time                 | double              | YES  |      | NULL    |       |
38. | Request_count                 | bigint(20) unsigned | YES  |      | NULL    |       |
39. | Total_keys                    | bigint(20) unsigned | YES  |      | NULL    |       |
40. | Process_keys                  | bigint(20) unsigned | YES  |      | NULL    |       |
41. | Rocksdb_delete_skipped_count  | bigint(20) unsigned | YES  |      | NULL    |       |
42. | Rocksdb_key_skipped_count     | bigint(20) unsigned | YES  |      | NULL    |       |
43. | Rocksdb_block_cache_hit_count | bigint(20) unsigned | YES  |      | NULL    |       |
44. | Rocksdb_block_read_count      | bigint(20) unsigned | YES  |      | NULL    |       |
45. | Rocksdb_block_read_byte       | bigint(20) unsigned | YES  |      | NULL    |       |
46. | DB                            | varchar(64)         | YES  |      | NULL    |       |
47. | Index_names                   | varchar(100)        | YES  |      | NULL    |       |
48. | Is_internal                   | tinyint(1)          | YES  |      | NULL    |       |
49. | Digest                        | varchar(64)         | YES  |      | NULL    |       |
50. | Stats                         | varchar(512)        | YES  |      | NULL    |       |
51. | Cop_proc_avg                  | double              | YES  |      | NULL    |       |
52. | Cop_proc_p90                  | double              | YES  |      | NULL    |       |
53. | Cop_proc_max                  | double              | YES  |      | NULL    |       |
54. | Cop_proc_addr                 | varchar(64)         | YES  |      | NULL    |       |
55. | Cop_wait_avg                  | double              | YES  |      | NULL    |       |
56. | Cop_wait_p90                  | double              | YES  |      | NULL    |       |
57. | Cop_wait_max                  | double              | YES  |      | NULL    |       |
58. | Cop_wait_addr                 | varchar(64)         | YES  |      | NULL    |       |
59. | Mem_max                       | bigint(20)          | YES  |      | NULL    |       |
60. | Disk_max                      | bigint(20)          | YES  |      | NULL    |       |
61. | KV_total                      | double              | YES  |      | NULL    |       |
62. | PD_total                      | double              | YES  |      | NULL    |       |
63. | Backoff_total                 | double              | YES  |      | NULL    |       |
64. | Write_sql_response_total      | double              | YES  |      | NULL    |       |
65. | Result_rows                   | bigint(22)          | YES  |      | NULL    |       |
66. | Warnings                      | longtext            | YES  |      | NULL    |       |
67. | Backoff_Detail                | varchar(4096)       | YES  |      | NULL    |       |
68. | Prepared                      | tinyint(1)          | YES  |      | NULL    |       |
69. | Succ                          | tinyint(1)          | YES  |      | NULL    |       |
70. | IsExplicitTxn                 | tinyint(1)          | YES  |      | NULL    |       |
71. | IsWriteCacheTable             | tinyint(1)          | YES  |      | NULL    |       |
72. | Plan_from_cache               | tinyint(1)          | YES  |      | NULL    |       |
73. | Plan_from_binding             | tinyint(1)          | YES  |      | NULL    |       |
74. | Has_more_results              | tinyint(1)          | YES  |      | NULL    |       |
75. | Resource_group                | varchar(64)         | YES  |      | NULL    |       |
76. | Request_unit_read             | double              | YES  |      | NULL    |       |
77. | Request_unit_write            | double              | YES  |      | NULL    |       |
78. | Time_queued_by_rc             | double              | YES  |      | NULL    |       |
79. | Plan                          | longtext            | YES  |      | NULL    |       |
80. | Plan_digest                   | varchar(128)        | YES  |      | NULL    |       |
81. | Binary_plan                   | longtext            | YES  |      | NULL    |       |
82. | Prev_stmt                     | longtext            | YES  |      | NULL    |       |
83. | Query                         | longtext            | YES  |      | NULL    |       |
84. +-------------------------------+---------------------+------+------+---------+-------+
85. 80 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_7                | 1.00     | root      |                          | funcs:count(1)->Column#75                            |
5. | └─TableReader_13           | 10.00    | root      |                          | data:Selection_12                                    |
6. |   └─Selection_12           | 10.00    | cop[tidb] |                          | eq(INFORMATION_SCHEMA.cluster_slow_query.user, "u1") |
7. |     └─TableFullScan_11     | 10000.00 | cop[tidb] | table:CLUSTER_SLOW_QUERY | keep order:false, stats:pseudo                       |
8. +----------------------------+----------+-----------+--------------------------+------------------------------------------------------+
9. 4 rows in set (0.00 sec)

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

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

1. SELECT /*+ AGG_TO_COP() */ COUNT(*) FROM CLUSTER_SLOW_QUERY GROUP BY user;