表设置好tiflash设置后,执行计划看不到tiflash使用

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】7.1
【复现路径】表设置了tiflash副本完成后,表查询的执行计划发现查询没有走tiflash; explain SQL
【遇到的问题:问题现象及影响】
查询的执行计划发现查询没有走tiflash; explain SQL;
但是按照网上的介绍,可以强制设置mpp,
set tidb_allow_mpp=‘ON’;
set tidb_enforce_mpp=‘ON’;
set tidb_opt_force_inline_cte=‘ON’;
但是它都是在session范围内生效,无法在全局内生效。请问怎样让他在全局内生效?或者说设置了tiflash,但是执行计划不走tiflash,它的原因是什么?
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

按要求复制粘贴下执行计划文本

原因在这:

参考文档:
https://docs.pingcap.com/zh/tidb/stable/use-tidb-to-read-tiflash#智能选择

请按照文档先设定隔离区域,或者采用 hint 的方式强制 SQL 启用 tiflash 的数据读取
https://docs.pingcap.com/zh/tidb/stable/use-tidb-to-read-tiflash#手工-hint

1 个赞

mpp要求查的SQL中涉及的表都要有tiflash 副本,所以全局生效没啥意义吧,所有SQL都有MPP不太合适

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

注意

tidb_enforce_mpp=1 在生效时,TiDB 优化器会忽略代价估算选择 MPP 模式。但如果存在其它不支持 MPP 的因素,例如没有 TiFlash 副本、TiFlash 副本同步未完成、语句中含有 MPP 模式不支持的算子或函数等,那么 TiDB 仍然不会选择 MPP 模式。

如果由于代价估算之外的原因导致 TiDB 优化器无法选择 MPP,在你使用 EXPLAIN 语句查看执行计划时,会返回警告说明原因,例如:

set @@session.tidb_enforce_mpp=1;
create table t(a int);
explain select count(*) from t;
show warnings;
+---------+------+-----------------------------------------------------------------------------+
| Level   | Code | Message                                                                     |
+---------+------+-----------------------------------------------------------------------------+
| Warning | 1105 | MPP mode may be blocked because there aren't tiflash replicas of table `t`. |
+---------+------+-----------------------------------------------------------------------------+

你应该尝试show warnings ,这样会显示不能mpp的原因。

可以加hint试下,是否更慢了
select /*+ read_from_storage(tiflash[t1,t2]) */ ...

另外确认下tidb的engines配置:
select * from information_schema.cluster_config where KEY ='isolation-read.engines';

我觉得你先看下SHOW config WHERE NAME LIKE ‘%isolation-read.engines%’;设置里有没有tiflash

tiflash生效一个与配置有关,一个与查询的SQL有关,两个都要合适才行

设置完不行,还得analyze下设置tiflash副本的表

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。