课程名称:3.7.3 Optimize query health(查询优化器)
学习时长:30min
课程收获:
如何利用系统表定位不健康的查询
课程内容:
如何分辨查询是否健康
1、影响健康的因素:
a、某个节点是热点,导致数据库瓶颈
b、统计信息过期,导致执行计划发生变化
c、读写冲突
d、等等
2、如何辨别
使用查询延迟来辨别是否健康
查询阶段如下图
发现不健康的查询
1、statements_summary表
是一张系统内存表,它的数据在TiDBserver重启后就会丢失,只保存最近30分钟的数据
2、sql指纹,同类型的sql指纹是一样的
3、slow_query表
是从慢日志文件解析得到的
4、slow_query表和statements_summary表,仅包含当前TiDB的数据,如果集群中有多个TiDB实例,可以通过cluster_slow_query或cluster_statements_summary进行查询
5、哪种sql的查询总时间最长
select sum_latency,avg_latency,exec_count,query_sample_text from information_schema.statements_summary order by sum_latency desc limit 3;
6、查询某个具体的sql的平均延迟
select avg_latency,exec_count,query_sample_text from information_schema.statements_summary where digest_text like 'select count(*) from xxxx%';
7、查询计划是否发生变更
select digest,count(*),min(query_sample_text),min(plan),max(plan) from statements_summary group by digest having count(*) > 1;
8、查询某个用户topN的一个查询
select query_time,query,user from cluster_slow_query where is_internal=false and user like 'xxx' order by query_time desc limit 2;
9、查询统计信息过期的慢查询
select query,query_time,stats from cluster_slow_query where is_internal=false and stats like '%pseudo%';
10、查询计划发生变更的慢查询
select count(distinct plan_digest) as count ,digest, min(query) from cluster_slow_query group by digest having count(*) >1 limit 3;
学习过程中遇到的问题或延伸思考:
- 问题 1:
- 问题 2:
- 延伸思考 1:
- 延伸思考 2: