扬仔_tidb
(Ti D Ber I Ruk U8 Tg)
1
【 TiDB 使用环境】生产环境
【 TiDB 版本】
旧集群v5.3.0
新集群v6.5.5
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
最近在将v5旧集群数据迁移到v6版本里。用的工具是lightning+ticdc
问题:SQL语句在v6版本里比v5版本里普遍要慢2-5倍
- SQL语句
此sql只是案例,其它几个复杂sql就没贴进来,效果都是新集群慢
:select
from
cart.cart
where
gmt_create >= DATE(NOW()) - INTERVAL 7 DAY
and is_delete = 0
and sub_biz_type in (301, 101, 341, 348)
2. 在v5旧集群执行计划
3. 在v6新集群执行计划
【资源配置】
tidb-server:2台16c/32g
tikv:4台16c/32g
tiflash:3台16c/32g
【附件:截图/日志/监控】
请问升到v6新版本应该要调哪些参数?不然升级好尴尬
v6执行计划选择走tiflash了,先给这些表做个analyze看看
有猫万事足
3
6.5走了tiflash mpp。5.0虽然从tikv走的,但是用上了索引。所以表现好了一些。
如果都是这种从tikv变到tiflash造成的执行时间变长,那反而好解决了。
要恢复原来的执行计划,有很多办法。
1,可以关掉mpp试试。
https://docs.pingcap.com/zh/tidb/stable/use-tiflash-mpp-mode#控制是否选择-mpp-模式
2,设置 Engine 隔离
https://docs.pingcap.com/zh/tidb/stable/use-tidb-to-read-tiflash#engine-隔离
当然如果就希望从tiflash读取,mpp模式是机器越多,性能越好。有资源不妨多开几个tiflash实例试试看。
1 个赞
Kongdom
(Kongdom)
5
如果表结构索引一致的话,v6不应该走TiFlash才对吧~analyze table一下看看
1 个赞
扬仔_tidb
(Ti D Ber I Ruk U8 Tg)
6
感谢大家 的回答
我现在将表都做了表分析,结果如下
新集群在 tidb_cost_model_version
=2的情况下,执行带left json和子查询组合的复杂SQL要4-5秒,而老集群只要2秒左右。执行计划主要差别就在新集群走了tiflash查询的数据量太大。
如果新集群在sql前强制走mpp,耗时大概在2-3秒仍然没有旧集群快
接下来要做的事
此集群是给BI统计部门使用,新集群增加tiflash。因为旧集群的tikv节点内存达90%,经常告警
如果实在不行,只能将tidb_cost_model_version改为1,给开发用了。
有一事不明,这引tidb_cost_model_version参数在6里面是否成熟?引起的新旧集群里执行计划变化,不知官方可有解释,或大家可有遇到或对比过新老版本同样SQL的性能差异
扬仔_tidb
(Ti D Ber I Ruk U8 Tg)
10
SQL
语句
新集群执行计划
旧集群执行计划
大家看这SQL能怎么优化让在6版本运行的比5版本快呢
为什么看你2个版本的表cart数据量不一样,5版本的estrows 和actrows差距太大了
扬仔_tidb
(Ti D Ber I Ruk U8 Tg)
12
目前发现时间过滤DATE(sysdate()) - INTERVAL 7 DAY改成具体时间,不使用函数。
新集群2秒内
旧集群2秒左右
参考另一位大佬的贴子。
结论
时间函数导致索引失效
扬仔_tidb
(Ti D Ber I Ruk U8 Tg)
13
数据其实是一样的,正在ticdc同步中
5版本estrows和actrows差异,因为5里好久没有表分析了,6是昨晚刚刚分析的
有猫万事足
16
把这几个表都加进tiflash里面,然后开强制mpp,试一下要多少时间。
主要的时间消耗都在tiflash 从3.7亿里面找200w数据的时间消耗上,这4个表直接mpp 计算,可能反而会快。