TiDB 查询优化及调优系列(三)慢查询诊断监控及排查
本章节介绍如何利用 TiDB 提供的系统监控诊断工具,对运行负载中的查询进行排查和诊断。除了上一章节介绍的通过 EXPLAIN 语句来查看诊断查询计划问题外,本章节主要会介绍通过 TiDB Slow Query 慢查询内存表,以及 TiDB Dashboard 的可视化 Statements 功能来监控和诊断慢查询。
1.Slow Query 慢查询内存表
慢查询日志示例及字段说明
#?Time:?2019-08-14T09:26:59.487776265+08:00
#?Txn_start_ts:?410450924122144769
#?User:?root@127.0.0.1
#?Conn_ID:?3086
#?Query_time:?1.527627037
#?Parse_time:?0.000054933
#?Compile_time:?0.000129729
#?Process_time:?0.07?Wait_time:?0.002?Backoff_time:?0.002?Request_count:?1?Total_keys:?131073?Process_keys:?131072?Prewrite_time:?0.335415029?Commit_time:?0.032175429?Get_commit_ts_time:?0.000177098?Local_latch_wait_time:?0.106869448?Write_keys:?131072?Write_size:?3538944?Prewrite_region:?1
#?DB:?test
#?Is_internal:?false
#?Digest:?50a2e32d2abbd6c1764b1b7f2058d428ef2712b029282b776beb9506a365c0f1
#?Stats:?t:414652072816803841
#?Num_cop_tasks:?1
#?Cop_proc_avg:?0.07?Cop_proc_p90:?0.07?Cop_proc_max:?0.07?Cop_proc_addr:?172.16.5.87:20171
#?Cop_wait_avg:?0?Cop_wait_p90:?0?Cop_wait_max:?0?Cop_wait_addr:?172.16.5.87:20171
#?Mem_max:?525211
#?Succ:?true
#?Plan_digest:?e5f9d9746c756438a13c75ba3eedf601eecf555cdb7ad327d7092bdd041a83e7
#?Plan:?tidb_decode_plan('ZJAwCTMyXzcJMAkyMAlkYXRhOlRhYmxlU2Nhbl82CjEJMTBfNgkxAR0AdAEY1Dp0LCByYW5nZTpbLWluZiwraW5mXSwga2VlcCBvcmRlcjpmYWxzZSwgc3RhdHM6cHNldWRvCg==')
insert?into?t?select?*?from?t;
Slow Query 内存表使用排查
>?select?query_time,?query
????from?information_schema.slow_query???--?检索当前?TiDB?节点的慢查询
???where?is_internal?=?false?????????????--?排除?TiDB?内部的慢查询
??order?by?query_time?desc
??limit?2;
+--------------+------------------------------------------------------------------+
|?query_time???|?query????????????????????????????????????????????????????????????|
+--------------+------------------------------------------------------------------+
|?12.77583857??|?select?*?from?t_slim,?t_wide?where?t_slim.c0=t_wide.c0;??????????|
|??0.734982725?|?select?t0.c0,?t1.c1?from?t_slim?t0,?t_wide?t1?where?t0.c0=t1.c0;?|
+--------------+------------------------------------------------------------------+
>?select?query_time,?query,?user
????from?information_schema.cluster_slow_query??--?检索全部?TiDB?节点的慢查询
??where?is_internal?=?false??
????and?user?=?"test"
??order?by?query_time?desc
??limit?2;
+-------------+------------------------------------------------------------------+----------------+
|?Query_time??|?query????????????????????????????????????????????????????????????|?user???????????|
+-------------+------------------------------------------------------------------+----------------+
|?0.676408014?|?select?t0.c0,?t1.c1?from?t_slim?t0,?t_wide?t1?where?t0.c0=t1.c1;?|?test???????????|
+-------------+------------------------------------------------------------------+----------------+
--?先获取?Top?N?的慢查询和对应的?SQL?指纹
>?select?query_time,?query,?digest
????from?information_schema.cluster_slow_query
???where?is_internal?=?false
??order?by?query_time?desc
??limit?1;
+-------------+-----------------------------+------------------------------------------------------------------+
|?query_time??|?query???????????????????????|?digest???????????????????????????????????????????????????????????|
+-------------+-----------------------------+------------------------------------------------------------------+
|?0.302558006?|?select?*?from?t1?where?a=1;?|?4751cb6008fda383e22dacb601fde85425dc8f8cf669338d55d944bafb46a6fa?|
+-------------+-----------------------------+------------------------------------------------------------------+
--?再根据?SQL?指纹检索同类慢查询
>?select?query,?query_time
????from?information_schema.cluster_slow_query
???where?digest?=?"4751cb6008fda383e22dacb601fde85425dc8f8cf669338d55d944bafb46a6fa";
+-----------------------------+-------------+
|?query???????????????????????|?query_time??|
+-----------------------------+-------------+
|?select?*?from?t1?where?a=1;?|?0.302558006?|
|?select?*?from?t1?where?a=2;?|?0.401313532?|
+-----------------------------+-------------+
>?select?query,?query_time,?stats
????from?information_schema.cluster_slow_query
??where?is_internal?=?false
????and?stats?like?'%pseudo%';
+-----------------------------+-------------+---------------------------------+
|?query???????????????????????|?query_time??|?stats???????????????????????????|
+-----------------------------+-------------+---------------------------------+
|?select?*?from?t1?where?a=1;?|?0.302558006?|?t1:pseudo???????????????????????|
|?select?*?from?t1?where?a=2;?|?0.401313532?|?t1:pseudo???????????????????????|
|?select?*?from?t1?where?a>2;?|?0.602011247?|?t1:pseudo???????????????????????|
|?select?*?from?t1?where?a>3;?|?0.50077719??|?t1:pseudo???????????????????????|
|?select?*?from?t1?join?t2;???|?0.931260518?|?t1:407872303825682445,t2:pseudo?|
+-----------------------------+-------------+---------------------------------+
>?select?count(distinct?plan_digest)?as?count,?digest,min(query)?
????from?information_schema.cluster_slow_query?
??group?by?digest?
??having?count>1?
??limit?3\G
***************************[?1.?row?]***************************
count??????|?2
digest?????|?17b4518fde82e32021877878bec2bb309619d384fca944106fcaf9c93b536e94
min(query)?|?SELECT?DISTINCT?c?FROM?sbtest25?WHERE?id?BETWEEN???AND???ORDER?BY?c?[arguments:?(291638,?291737)];
***************************[?2.?row?]***************************
count??????|?2
digest?????|?9337865f3e2ee71c1c2e740e773b6dd85f23ad00f8fa1f11a795e62e15fc9b23
min(query)?|?SELECT?DISTINCT?c?FROM?sbtest22?WHERE?id?BETWEEN???AND???ORDER?BY?c?[arguments:?(215420,?215519)];
***************************[?3.?row?]***************************
count??????|?2
digest?????|?db705c89ca2dfc1d39d10e0f30f285cbbadec7e24da4f15af461b148d8ffb020
min(query)?|?SELECT?DISTINCT?c?FROM?sbtest11?WHERE?id?BETWEEN???AND???ORDER?BY?c?[arguments:?(303359,?303458)];
--?借助?SQL?指纹进一步查询执行计划的详细信息
>?select?min(plan),plan_digest?
????from?information_schema.cluster_slow_query
??where?digest='17b4518fde82e32021877878bec2bb309619d384fca944106fcaf9c93b536e94'?
??group?by?plan_digest\G
***************************?1.?row?***************************
??min(plan):????Sort_6??????????????????root????100.00131380758702??????sbtest.sbtest25.c:asc
????????└─HashAgg_10????????????root????100.00131380758702??????group?by:sbtest.sbtest25.c,?funcs:firstrow(sbtest.sbtest25.c)->sbtest.sbtest25.c
??????????└─TableReader_15??????root????100.00131380758702??????data:TableRangeScan_14
????????????└─TableScan_14??????cop?????100.00131380758702??????table:sbtest25,?range:[502791,502890],?keep?order:false
plan_digest:?6afbbd21f60ca6c6fdf3d3cd94f7c7a49dd93c00fcf8774646da492e50e204ee
***************************?2.?row?***************************
??min(plan):????Sort_6??????????????????root????1???????????????????????sbtest.sbtest25.c:asc
????????└─HashAgg_12????????????root????1???????????????????????group?by:sbtest.sbtest25.c,?funcs:firstrow(sbtest.sbtest25.c)->sbtest.sbtest25.c
??????????└─TableReader_13??????root????1???????????????????????data:HashAgg_8
????????????└─HashAgg_8?????????cop?????1???????????????????????group?by:sbtest.sbtest25.c,
??????????????└─TableScan_11????cop?????1.2440069558121831??????table:sbtest25,?range:[472745,472844],?keep?order:false
>?select?instance,?count(*)?
????from?information_schema.cluster_slow_query?
???where?time?>=?"2020-03-06?00:00:00"?
?????and?time?<?now()?
??group?by?instance;
+---------------+----------+
|?instance??????|?count(*)?|
+---------------+----------+
|?0.0.0.0:10081?|?124??????|
|?0.0.0.0:10080?|?119771???|
+---------------+----------+
>?select?*?from
????(select?/*+?AGG_TO_COP(),?HASH_AGG()?*/?count(*),
?????????min(time),
?????????sum(query_time)?AS?sum_query_time,
?????????sum(Process_time)?AS?sum_process_time,
?????????sum(Wait_time)?AS?sum_wait_time,
?????????sum(Commit_time),
?????????sum(Request_count),
?????????sum(process_keys),
?????????sum(Write_keys),
?????????max(Cop_proc_max),
?????????min(query),min(prev_stmt),
?????????digest
????from?information_schema.cluster_slow_query
????where?time?>=?'2020-03-10?13:24:00'
??????and?time?<?'2020-03-10?13:27:00'
??????adn?Is_internal?=?false
????group?by??digest)?AS?t1
??where?t1.digest?not?in
????(select?/*+?AGG_TO_COP(),?HASH_AGG()?*/?digest
????from?information_schema.cluster_slow_query
????where?time?>=?'2020-03-10?13:20:00'?--?排除正常时段?`2020-03-10?13:20:00`?~?`2020-03-10?13:23:00`?期间的慢查询
??????and?time?<?'2020-03-10?13:23:00'
???group?by??digest)
??order?by?t1.sum_query_time?desc
??limit?10\G
***************************[?1.?row?]***************************
count(*)???????????|?200
min(time)??????????|?2020-03-10?13:24:27.216186
sum_query_time?????|?50.114126194
sum_process_time???|?268.351
sum_wait_time??????|?8.476
sum(Commit_time)???|?1.044304306
sum(Request_count)?|?6077
sum(process_keys)??|?202871950
sum(Write_keys)????|?319500
max(Cop_proc_max)??|?0.263
min(query)?????????|?delete?from?test.tcs2?limit?5000;
min(prev_stmt)?????|
digest?????????????|?24bd6d8a9b238086c9b8c3d240ad4ef32f79ce94cf5a468c0b8fe1eb5f8d03df
2.TiDB Dashboard 可视化 Statements
使用 TiDB Dashboard
查看 Statements 整体情况
SELECT?*?FROM?employee?WHERE?id?IN?(1,?2,?3);
select?*?from?EMPLOYEE?where?ID?in?(4,?5);
select?*?from?employee?where?id?in?(...);


Statements 参数配置
Statements 功能默认开启,也可以通过设置系统变量打开,例如:
set?global?tidb_enable_stmt_summary?=?true;
set?global?tidb_stmt_summary_refresh_interval?=?1800;
设置 performance_schema.events_statements_summary_by_digest_history 表保存每种 SQL 的历史的数量,默认值是 24,例如:
set?global?tidb_stmt_summary_history_size?=?24;
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 习近平将发表二〇二六年新年贺词 7904141
- 2 2026年国补政策来了 7808738
- 3 东部战区:开火!开火!全部命中! 7712893
- 4 2026年这些民生政策将惠及百姓 7616985
- 5 小学食堂米线过期2.5小时被罚5万 7519709
- 6 解放军喊话驱离台军 原声曝光 7428214
- 7 为博流量直播踩烈士陵墓?绝不姑息 7327605
- 8 每月最高800元!多地发放养老消费券 7238391
- 9 数字人民币升级 1月1日起将计付利息 7141831
- 10 2026年1月1日起 一批新规将施行 7040675








PingCAP
