tiflash性能问题

【 TiDB 使用环境】生产环境
【 TiDB 版本】V6.1.6
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
一张1.3亿条记录的表,使用select count复杂查询需要13秒,表已经做了tiflash同步。这个速度有点慢,如何继续优化?刚开始task还是mpp,单是记录多了之后变成cop。
explain analyze select count(1) from vm_company_derived_variables_df_1m
where new_status = 1
and ((c_city = ‘厦门市’ or c_city = ‘宁德市’) or (c_province = ‘上海’ and c_district = ‘闵行区’))
and c_industry_new in (‘餐饮’,‘零售’,‘服务’,‘文体’,‘贸易’,‘食品饮料’,‘国防军工’,‘旅游业’,‘家电’,‘传媒’,
‘交通运输’,‘电力设备’,‘钢铁’,‘有色’,‘金融’,‘电子’,‘化工’,‘能源’,‘机械设备’)
and (c_xw=1 or c_kjzxw=1 or c_new_fourth_board=1 or c_zgcun_ht=1 or c_new_three_board =1 or c_national_zjt = 1
or c_yingying_enterprise = 1 or c_torch_plan_project =1 or c_gazelle_enterprise=1 or c_private_technology=1)
and ((c_income_10v1 >= 10000000 and c_income_10v1 <= 60000000) or (c_income_25v1 >= 10000000 and c_income_25v1 <= 60000000)
or (c_income_50v1 >= 10000000 and c_income_50v1 <= 60000000) or (c_income_75v1 >= 10000000 and c_income_75v1 <= 60000000)
or (c_income_90v1 >= 10000000 and c_income_90v1 <= 60000000))

【资源配置】
一台物理机,虚拟机,PD:3台,TIDB:3台,每台32G内存,TIKV:3台,每台32G内存。TIFLASH:1台,硬盘SSD。
【附件:截图/日志/监控】
explain.txt (3.4 KB)

threads:900 这个太多了!

set tidb_max_tiflash_threads=6;
然后再执行这个语句看看?

改成6了没有起作用,现在2亿数据, threads变成1366了,什么原因?

使用 https://docs.pingcap.com/zh/tidb/v6.1/sql-plan-replayer#使用-plan-replayer-保存和恢复集群现场信息 收集下信息。

1 个赞

可能走tiflash不是最优解,tiflash是列存,对表里少数列筛选判断快,你的条件这么多,可能需要访问的列的太多了不如走kv

https://docs.pingcap.com/zh/tidb/stable/use-tiflash-mpp-mode#控制是否选择-mpp-模式

TiFlash 支持 MPP 模式的查询执行,即在计算中引入跨节点的数据交换(data shuffle 过程)。

你只有一台tiflash。如上所属,我的理解是mpp和cop在单台tiflash的情况下应该差距不大。(怎么跨节点都只有一台,最多也就是自己和自己数据交换)而且mpp有些算子也不支持,你要觉得是mpp的问题导致查询慢了,可以像下面这样,强制开启mpp模式试一下是否会快。

如果想要 TiDB 忽略优化器的代价估算,强制使用 MPP,可以通过如下语句来设置:

set @@session.tidb_allow_mpp=1;
set @@session.tidb_enforce_mpp=1;