tidb sql查询出现长尾请求,超过百分之九十九的请求都是毫秒执行结束,但有部分需要5-10秒才执行结束

我在查询tidb时,部分请求特别慢,我看了执行计划,差别在这里
{num: 8, max: 7.05s, min: 1.26ms, avg: 885ms, p95: 7.05s, max_proc_keys: 9184, p95_proc_keys: 9184, tot_proc: 7.07s, rpc_num: 8, rpc_time: 7.08s, copr_cache_hit_ratio: 0.00, distsql_concurrency: 80}

{num: 4, max: 3.28ms, min: 1.25ms, avg: 1.89ms, p95: 3.28ms, max_proc_keys: 2016, p95_proc_keys: 2016, tot_proc: 3ms, rpc_num: 4, rpc_time: 7.47ms, copr_cache_hit_ratio: 0.00, distsql_concurrency: 80}   

核对了实行快的和执行慢的sql ,发现执行快的基本上读取tikv时都是4个线程,慢的全部是8个线程,是有推测执行或者重试机制吗

cop num不一样 说明请求的数据量也是不一样的 最好能完整贴下2个SQL执行计划,另外可以trace看下 慢在哪个region上

你可以看一下是不是因为统计信息的收集导致的慢,看一下tikv-detail-Coprocessor Overview
的监控图,看你的表,是一个分区表,而且分区挺多的。多数原因是跟统计信息有关,统计信息占用资源,导致资源短暂的占用等待,我这也出现类似于你这种现象:我的监控图如下:

另个下面还有一个监控图。你可以看一下你的是不是也是这样的,我这类似于这样的:

感谢回答,我看了我这边的和您这个还不一样,我的是select 耗时长,收集统计信息占用时间不长

执行计划几乎一样,差距就在我贴的这里,这是接口大量请求才会出现少数,手动执行很难复现

贴一个完整的执行计划就这么困难吗?对于疑难问题本身就很复杂,然后又给这么少的信息,让人非常难以判断。最起码的也要给一个执行差的完整执行计划信息,如果再慷慨一点贴一下执行不差的完整的执行计划信息。

是相同sql么?
如果是相同sql时快时慢,可以考虑是否是有热点或者慢查询时集群繁忙
如果不是相同sql,建议上传完整的慢sql执行计划,敏感信息可以打码

2 个赞

就是相同的sql,执行计划都是完全一样,不一样我也不会问了.我也怀疑是tikv那块繁忙,但看监控吧,比平时也相差不大。

那是不是有热点呢?

1 个赞

从流量图上看是存在热点的,因为我们这边存在批任务,我也怀疑是io相关的影响。

学习一下

:thinking:个人觉得可能热点的概率大一点

1 个赞