TiDB Cluster 视图
视图 | 作用 | SQL |
CLUSTER_PROCESSLIST | 查询会话信息 | 1)实时TOP SQL执行次数、平均时间维度 2)实时TOP 10 SQL按执行时间排序 3)实时按照ID杀进程 |
CLUSTER_SLOW_QUERY | 查询慢SQL | 1)查询慢SQL Text 2)查询慢SQL平均时间执行次 |
CLUSTER_STATEMENTS_SUMMARY | 近30分钟TOP SQL | 1)查询近30分钟 TOP SQL |
CLUSTER_STATEMENTS_SUMMARY_HISTORY | 30分钟后持久话TOP SQL | 目前发现持久化并未按照理想情况持久,需要再观察一下。 |
CLUSTER_LOAD | 查询负载信息 | - |
CLUSTER_HARDWARE | 查询硬件信息 | - |
CLUSTER_CONFIG | 查询集群配置信息 | - |
CLUSTER_LOG | 查询集群日志信息 | - |
CLUSTER_SYSTEMINFO | 查询系统新系统配置信息 | - |
- CLUSTER_PROCESSLIST
cluster_processlist 视图类似于Oracle gv$session用于查看会话信息,但是可查的信息较少,没有Oracle丰富的Event内容。不过可以看看SQL执行情况,也很有帮助。
TOP SQL执行次数平均时间维度
select substr(INFO,1,100) sql_text,avg(TIME),count(*) cc from cluster_processlist where info!=‘NULL’ group by substr(INFO,1,100) order by count(*);


TOP 10 SQL按执行SQL平均时间排序
select current_time;
select * from (
select ID,INSTANCE,INFO,max(TIME) max_time from cluster_processlist where INFO like ‘update%’ group by INSTANCE,ID,INFO order by max(TIME) desc
) a limit 10;
按照ID杀进程
MySQL [nlc]> show processlist -> ;
+--------+------+----------------+--------------------+---------+-------+-------+------------------------------------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info
|+--------+------+----------------+--------------------+---------+-------+-------+------------------------------------------------------------------------------------------------------+
| 428968 | root | 10.10.10.111 | information_schema | Query | 110 | 2 | SELECT Digest,Conn_ID,(UNIX_TIMESTAMP(Time) + 0E0) AS timestamp,Query,Query_time,Me
|+--------+------+----------------+--------------------+---------+-------+-------+------------------------------------------------------------------------------------------------------+.........
MySQL [nlc]> kill tidb 428968;
Query OK, 0 rows affected (0.00 sec)
快速生成kill sql
select TIME e_time,INSTANCE,’ :--kill tidb ‘ || ID |;| FROM cluster_processlist where INFO like ‘update%’ order by e_time desc;
- CLUSTER_SLOW_QUERY
Dashboard 中慢查询出处,查询CLUSTER_SLOW_QUERY视图一定要加上Time字段,否则你可能查不到你想要的信息。
查询慢SQL Text
select Query,count(*),round(avg(Query_time),1) etime from CLUSTER_SLOW_QUERY where Time>‘2022-03-07 09:00:00.647448’ and Time <‘2022-03-07 09:30:00.647448’ and Query like ‘update%tab1 %force index (index1) set%’ group by Query order by Query,count(*);
查询慢SQL平均时间执行次
select date_format(Time,’%Y-%m-%d %H:%i’) as stime,round(avg(Query_time),1) etime,count(*) cc from INFORMATION_SCHEMA.CLUSTER_SLOW_QUERY
where Time>‘2022-03-07 09:00:00.647448’ and Time <‘2022-03-07 09:30:00.647448’ and Query like ‘update tab1 force index (index1) %’ group by date_format(Time,’%Y-%m-%d %H:%i’) order by stime;
- CLUSTER_STATEMENTS_SUMMARY
查看TOP SQL使用
因为慢查询日志里面只会记录超过slow-threshold 参数所设置时间的SQL,默认300ms。所以导致很多低于300ms的Top SQL无法捕获和查询,我比较建议持久化这张表中的数据,TiDB似乎也意识到了这一点,将其持久化到CLUSTER_STATEMENTS_SUMMARY_HISTORY表中,但是TiDB做的并不是很好,也因为一定的驱逐机制,导致经常查不到想要的数据,所以我们使用自有监控对这一数据进行了持久化。
它把 SQL 按 SQL digest 和 plan digest 分组,统计每一组的 SQL 信息。
此处的 SQL digest 与 slow log 里的 SQL digest 一样,是把 SQL 规一化后算出的唯一标识符。SQL 的规一化会忽略常量、空白符、大小写的差别。即语法一致的 SQL 语句,其 digest 也相同。
Dashboard TOP SQL 的出处。
SELECT DIGEST
,DIGEST_TEXT
,AVG_LATENCY e_time_avg
,EXEC_COUNT exec_count
,QUERY_SAMPLE_TEXT
,SUMMARY_BEGIN_TIME
,SUMMARY_END_TIME
,FIRST_SEEN
,LAST_SEEN
,QUERY_SAMPLE_TEXT
,PLAN_DIGEST
FROM CLUSTER_STATEMENTS_SUMMARY
WHERE SUMMARY_BEGIN_TIME >= ‘2022-02-22 09:30:00’
AND SUMMARY_END_TIME <= ‘2022-02-22 10:00:00’
AND QUERY_SAMPLE_TEXT LIKE ‘select * from tbclientadd1&’ \G
- CLUSTER_STATEMENTS_SUMMARY_HISTORY
查看TOP SQL使用
持久化CLUSTER_STATEMENTS_SUMMARY表上内容,当TOP 会话超过30分钟后,会持久化到CLUSTER_STATEMENTS_SUMMARY_HISTORY。实际使用中发现TiDB对这个视图的持久化并不是很好,经常查不到需要的信息。
因为CLUSTER_STATEMENTS_SUMMARY表中的内容再到达一定数量后会被驱除出去,
Dashboard TOP SQL 的出处。
SELECT DIGEST
,DIGEST_TEXT
,AVG_LATENCY e_time_avg
,EXEC_COUNT exec_count
,QUERY_SAMPLE_TEXT
,SUMMARY_BEGIN_TIME
,SUMMARY_END_TIME
,FIRST_SEEN
,LAST_SEEN
,QUERY_SAMPLE_TEXT
,PLAN_DIGEST
FROM CLUSTER_STATEMENTS_SUMMARY_HISTORY
WHERE SUMMARY_BEGIN_TIME >= ‘2022-02-22 09:30:00’
AND SUMMARY_END_TIME <= ‘2022-02-22 10:00:00’
AND QUERY_SAMPLE_TEXT LIKE ‘select * from tbclientadd1&’ \G




