TiFlash能否在部署副本后,关闭自动同步?

【 TiDB 版本】v8.5.0
【遇到的问题:问题现象及影响】
在使用TiFlash时,没有找到关于控制data sync的参数。
利用ALTER DATABASE tpcc SET TIFLASH REPLICA 1;构建副本之后,TIkv上的数据更新,自动更新到了TiFlash上。
请问有没有办法在保留TiFlash副本存在的同时,关闭对于TIkv上的数据更新的自动同步,使其与TIkv上的数据更新不一致?

补充:或者有没有替代方案,能够使数据更新后的查询通过TIKV进行,而没有更新过的数据才通过TiFlash进行查询呢?

1 个赞

要控制或禁用从 TiKV 到 TiFlash 的自动数据同步,或者根据数据更新状态实现查询路由策略,可以采取以下详细行动计划:

1. 控制或禁用自动数据同步

  • 调整 TiFlash 副本设置

    • 使用 SQL 语句调整 TiFlash 副本的数量。通过将副本数量设置为 0,可以停止特定表的数据同步。
    • 示例:
      ALTER TABLE table_name SET TIFLASH REPLICA 0;
      
    • 参考链接:TiFlash 概述
  • 使用 Raft Learner 角色

    • TiFlash 作为 Raft Learner 角色进行异步复制。可以通过调整 Raft 配置来影响数据同步的行为。

2. 实现基于数据更新状态的查询路由策略

  • 智能选择

    • TiDB 优化器可以根据成本估算自动决定是否使用 TiFlash 副本。可以通过 explain analyze 语句检查查询是否使用了 TiFlash。
    • 示例:
      explain analyze select count(*) from test.t;
      
    • 参考链接:使用 TiDB 读取 TiFlash 副本
  • 引擎隔离

    • 通过配置 tidb_isolation_read_engines 变量,指定所有查询使用特定引擎的副本。
    • 示例:
      set @@session.tidb_isolation_read_engines = "tikv,tiflash";
      
    • 参考链接:使用 TiDB 读取 TiFlash 副本
  • 手动提示

    • 使用手动提示强制 TiDB 在满足引擎隔离的前提下使用指定的副本。
    • 示例:
      select /*+ read_from_storage(tiflash[table_name]) */ ... from table_name;
      
    • 参考链接:使用 TiDB 读取 TiFlash 副本

通过以上方法,可以有效地控制数据同步和查询路由策略,以满足不同的业务需求和性能优化目标。

1 个赞

同一集群内没有这个功能,可以考虑搭建从集群,通过ticdc的changefeed 暂停,恢复实现。

2 个赞

不支持的

1 个赞

貌似不能像mysql stop slave

1 个赞

好的,谢谢

收到,感谢

这是个挺有意思的功能。如果能实现,确实某些场景还挺合适的。