【 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
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 天后被自动关闭。不再允许新回复。