使用explain analyze连续多次执行同一条sql执行时间差距很大

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】5.7
【遇到的问题】如题,单个TiDB连续执行同一条sql多次执行(计划一样)时间差距较大(有时10ms,有时100-200μs),多次执行过程中有几条差距较小。我想做查询计划的调优,但是这样差异很大的执行时间让我难以评估我的调优效果……想知道是因为缓存的原因吗?不知有什么办法可以得到较为稳定的执行时间(多次执行同一条sql时间相差不大)
【复现路径】执行完analyze table后连续多次执行同一条sql
【问题现象及影响】

【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

应该是首次执行产生的磁盘读多些,可以看下dashboard里慢sql记录的执行信息

1 个赞

5.7 是什么版本? :custard:

抱歉,是5.3.0,打字的时候手残了

有没有办法让tidb不使用缓存呀,或者每次都走磁盘

试一下 SQL_CACHESQL_NO_CACHE 是否把请求结果缓存到 TiKV (RocksDB) 的 BlockCache 中。对于一次性的大数据量的查询,比如 count(*) 查询,为了避免冲掉 BlockCache 中用户的热点数据,建议填上 SQL_NO_CACHE

1 个赞

最好的办法就是使用缓存~

看下执行计划 explain sql 和 实际执行结果 explain analyze sql 之间的差距,再来做一些调整

1 个赞

使用缓存才块,磁盘多慢啊,另外磁盘类型是什么样?

查询的完整语句是什么呢?如果输出结果内存可完全容纳按说只有第一次会走磁盘读

我想问一下,我每次都是走的同一个sql,但是每次的参数不一样,每次都回去kv里面去取数据撒,对吗?不会因为是同一个sql,条件不同(eg:时间条件:第一次是2021-01-01到2021-01-01 23:59:59 第二次是2021-01-02 到2021-01-02 23:59:59,这样每次都是回去kv取数据撒)