tiflash设置hint read_from_storage 表别名为什么生效

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】




加了表别名查询不走tiflash。怎么优化让走;在不设置tidballowmpp和tidbenforcempp

这个工具识别注释吗? 你试试mysql -c 打开一个连接


没有别名可以


这是MySQL客户端查的也是不行

切换到表的db,然后sql里把库名.去掉 能用别名

现在我需要多库的表做join,切换了话其他库的表也是没跑到tiflash,我想全部指定到tiflash去.

你会话设置tidb_allow_Mpp变量on , 不加hint 看看自己能走tiflash吗

设置了会走,现在只改SQL和tidb配置的情况下,怎么让他走呢?

感觉这个需要研发修复

可以先用折中的办法弄啊 :grinning:

单独弄个tidb,设置强制引擎走tifalsh,

1、确定你的客户端连接是否支持Hints?
MySQL 命令行客户端在 5.7.7 版本之前默认清除了 Optimizer Hints。如果需要在这些早期版本的客户端中使用 Hint 语法,需要在启动客户端时加上 --comments 选项。例如 mysql -h 127.0.0.1 -P 4000 -uroot --comments

2、你的取了别名,连接的时候用的不是表所属的数据库,需要在别名前把数据库名也指定,如t1表在db_name1数据库,而t2表在db_name2 ,写法应是 /*+ READ_FROM_STORAGE(TIFLASH[db_name1.t1], TIKV[db_name2.t2]) */

3、如果不生效,可以通过show warnings看下为啥不生效。

1 个赞

tidb_isolation_read_engines='tidb,tiflash’这个变量

1 个赞

我之前也遇到过,这个Hints 感觉很难用对。
不过,如果是想这个 SQL 所有表都走 TiFlash 可以试下7.5新增的SET_VAR(VAR_NAME=VAR_VALUE) Hint,直接通过临时改变 SQL 的变量值实现的。

/*+ SET_VAR(tidb_isolation_read_engines='tidb,tiflash’) */
1 个赞

另外,你执行的 tidb-server 的tidb_isolation_read_engines变量值是什么?如果没有包含TiFlash,是没办法通过READ_FROM_STORAGE这个HINT,让 SQL 走 TiFlash 引擎的。

1 个赞

这个是设了tidb,tikv,tiflash的

原话在这里: https://docs.pingcap.com/zh/tidb/v7.5/use-tidb-to-read-tiflash#手工-hint

那试下这个 HINT 试下,看能不能达到效果

1 个赞

额,不对,你先试下这个写法,我看你问题里贴的 SQL,加了别名,但是 HINTS 直接写的是表名。要用TIFLASH[db_name1.t1]这种方式

1 个赞