niegang
(Niegang)
1
【 TiDB 使用环境】
V 5.2.1 和 V4.0.15
【概述】 场景 + 问题概述
同一张表,使用相同SQL explain的查询速率差异巨大
explain及SQL 如下:
dish_analysis_result.sql (1.9 KB)
long_text_2021-10-29-10-27-03.txt (109.5 KB)
explain执行结果:
v4.0.15的结果
v4.0.15 (203.6 KB)
v5.2.1的结果
v5.2.1 (204.1 KB)
【背景】 做过哪些操作
2个TIDB的硬件配置相同 系统配置相同 TIDB配置基本都是默认配置
1 个赞
h5n1
(H5n1)
2
2个库上的表数据一致吗?
v4:
└─HashAgg_16(Probe) 1.00 182601 cop[tikv] time:34.4s
v5:
└─HashAgg_17(Probe) 1.00 352903 cop[tikv] time:1m6.4s,
actRows差一倍了
3 个赞
niegang
(Niegang)
3
2个表数据一致
数据是从5.2.1 同步到4.0.15的
2 个赞
h5n1
(H5n1)
4
└─IndexLookUp_33 1.00 182601 root
scan_detail: {total_process_keys: 144213, total_keys: 145142}
└─IndexLookUp_38 1.00 352903 root
scan_detail: {total_process_keys: 490941, total_keys: 493644
实际扫描的数据有差异
2 个赞
niegang
(Niegang)
5
select count 结果 2个库的表行数是一样的
1 个赞
这道题我不会
(Lizhengyang@PingCAP)
6
两边集群负载情况也是完全相同?一般数据同步的上游压力会比下游更大,SQL 性能出现差异也很正常。
1 个赞
这道题我不会
(Lizhengyang@PingCAP)
8
这条 SQL 每次查询都出现这种情况吗?如果是的话,可以分别把两个集群中表的统计信息、表结构和 SQL 提供下,我们尝试做下本地复现,表统计信息导出方式参考:
https://docs.pingcap.com/zh/tidb/v4.0/statistics#导出统计信息
1 个赞
niegang
(Niegang)
9
之前每次查询都是这种情况
我把tidb 5.2.1升级到5.2.2后,explain速度快了很多 但是很4.0.15比 还是慢了一倍
2个tidb集群的统计信息、表结构和 SQL 见如下:
tidb_error.zip (1.2 MB)
1 个赞
spc_monkey
(carry@pingcap.com)
11
v5.2.2 的优化器确实改进了,不过你的这个问题,建议考虑一下hint,使用索引 让使用 dish_data_brand 这个索引试试。
spc_monkey
(carry@pingcap.com)
13
,如果有效果记得反馈一下吧,这里没有选择合适索引,感觉怪怪的(你的表统计信息建议检查一下)
niegang
(Niegang)
14
5.2.2使用了 dish_data_brand 这个索引后,耗时6秒 比原先快了2秒
但是4.0.15 基本无变换,在2~3秒
2个版本之间的查询差距还是1倍以上
1 个赞
spc_monkey
(carry@pingcap.com)
16
额,你上面提供的执行计划是看时间是 1分钟多啊,为啥是 2-3秒,6秒之类的。帮确认一下?或者你提供一下,执行 2-3秒或 6秒时候的执行计划?
xb_xdy
17
不指定索引:
5.2.2版本:
4.0.15版本:
使用hint指定dish_data_brand索引:
5.2.2版本:
4.0.15版本:
spc_monkey
(carry@pingcap.com)
18
方便,再开启这个参数 看看执行结果嘛(第一次看 SQL 以为就一个 in,现在发现少看了一个条件)参数: tidb_enable_index_merge
(开启 session 级别的就行)
spc_monkey
(carry@pingcap.com)
19
不过关于 v5 和 v4 版本的,看执行计划,确实有点疑惑,我需要确认一下(能否提供给我2个版本的 explain analyze 的 文本结果:上面的是图,我需要看 execution info 的信息,后面的少了一些,看起来不方便)
spc_monkey
(carry@pingcap.com)
20
另外,如果咱们有环境测试的话,建议关注一下这几个参数: tidb_index_lookup_size
、 tidb_index_serial_scan_concurrency
、 tidb_executor_concurrency
(建议根据业务特点来设置)