INSERT语句的select中不会走tiflash么?

【 TiDB 使用环境】生产环境
【 TiDB 版本】v6.5.3
【复现路径】无
【遇到的问题:问题现象及影响】
今天优化的时候发现,insert时的select不会走tiflash组件?即使hint了也没有走。之前一直用的4.0,之后升级到高版本后就没关注了。
搜索了一下社区,这个竟然在高版本里不支持了?有没有高版本的同学验证一下?
官方有计划在新版本中支持么?看issues是停留在了四年前。 :joy:

1 个赞

我们也有这个需求点,分析处理的结果直接写到另外一张表里面。如果不能用tiflash的话,确实比较可惜

insert into select MySQL 不同隔离级别 需要加锁 tiflash 没法是实现,而且tiflash 相对来说可能失败啊,保证线性一致性

tiflash 感觉可靠性本来就没tikv高,走了风险大于收益

:flushed:没理解,这和加锁有关系么?我直接查询 和 查询后保存到其他表,感觉对源数据的要求都是一致的。

:joy:我直接通过tiflash查询展示,也是有风险么?感觉不应该呀。

应该指的事务加锁吧?
其实官方可以无事务支持的insert into select 导入(支持tiflash),这样更快

哦哦哦,你这么说我大概明白了,确实事务这里不好控制。但是肯定不可能支持insert无事务。 :thinking:

https://docs.pingcap.com/zh/tidb/stable/system-variables#tidb_enable_tiflash_read_for_write_stmt-从-v630-版本开始引入
这个参数开起来就可以了。

https://docs.pingcap.com/zh/tidb/stable/use-tidb-to-read-tiflash#三种方式之间关系的总结 官档有说明这个点

好吧,已经支持了。感谢 @WalterWj 大佬的指导。
虽然v6.5已经支持了,但因为是实验性功能,所以默认是关闭的。
https://docs.pingcap.com/zh/tidb/v6.5/tiflash-results-materialization

:+1: :+1: :+1:不过在v6.5还是实验性功能,还是不开启了。

最后总结发言。

v6.5.0开始支持,但为实验性功能,


https://docs.pingcap.com/zh/tidb/v6.5/tiflash-results-materialization

v7.1.0版本正式GA


https://docs.pingcap.com/zh/tidb/v7.1/tiflash-results-materialization

强制走下

可以强制走tiflash的

试过了,强制也不行

强制也不行的哦 :yum:

gtp:在TiDB中,INSERT ... SELECT语句的行为确实有一些特殊的地方,尤其是当涉及到TiFlash组件时。TiFlash是TiDB的列存储引擎,主要用于加速分析型查询。对于OLTP(在线事务处理)和OLAP(在线分析处理)的混合工作负载,TiDB通过TiFlash提供了一种高效的解决方案。

INSERT ... SELECT与TiFlash

按照设计,INSERT ... SELECT操作主要面向事务性的数据修改和数据迁移场景。这种操作通常涉及到大量的行级数据读取和写入。而TiFlash主要优化的是列式存储的分析查询,特别是那些涉及到大量列计算但行数较少的查询。

因此,即使你通过/*+ READ_FROM_STORAGE(TIFLASH[table_name]) */这样的查询提示(hint)来指示TiDB优化器使用TiFlash,INSERT ... SELECT这类操作可能仍然不会选择TiFlash执行。这主要是因为:

  1. 执行计划的选择:TiDB优化器会根据操作的性质和当前数据分布情况来选择最合适的执行计划。对于大量的行级操作,即使指定了TiFlash,优化器可能认为使用RowStore(TiKV)更高效。

  2. 事务一致性和实时性:TiFlash与TiKV之间的数据同步存在微小的延迟。对于需要实时数据一致性的INSERT ... SELECT操作,使用TiKV可以确保事务的隔离级别和一致性视图。

解决方案和建议

如果你确实需要通过INSERT ... SELECT操作来利用TiFlash的列存储优势,有几个可能的解决方案:

  • 分析型查询优化:如果你的目的是优化分析型查询,考虑将需要分析的数据先INSERT到一个临时表中,然后对该临时表执行分析查询,并显式地使用TiFlash。

  • 调整数据模型或查询:评估是否可以通过调整数据模型或重构查询逻辑来避免对INSERT ... SELECT的依赖,可能有助于更好地利用TiFlash。

  • 联系支持:如果你遇到的是性能问题,或者有特定的使用场景需要TiFlash支持INSERT ... SELECT,建议联系PingCAP的技术支持或社区寻求帮助,了解是否有最新的优化方案或配置调整建议。

总之,INSERT ... SELECT不使用TiFlash是由于TiDB内部优化器的决策和TiFlash设计定位所导致的。在需要利用TiFlash优化查询性能的场景中,可能需要通过调整数据处理逻辑或查询方式来实现。

:+1:gtp还是可以的

:+1: