官网
官方资料
TiFlash 接入 TiKV 集群后,默认不会开始同步数据。可通过 MySQL 客户端向 TiDB 发送 DDL 命令来为特定的表建立 TiFlash 副本:
1、为表建立副本(可以参考自身配置的tiflash数量配置副本数量):
#test1 测试表 创建一个tiflash副本
ALTER TABLE test1 SET TIFLASH REPLICA 1
删除副本(命令备用):
ALTER TABLE test1 SET TIFLASH REPLICA 0
假设有一张表 t
已经通过上述的 DDL 语句同步到 TiFlash,则通过以下语句创建的表也会自动同步到 TiFlash(命令备用):
CREATE TABLE table_name like t
2、查看表同步进度
可通过如下 SQL 语句查看特定表(通过 WHERE 语句指定,去掉 WHERE 语句则查看所有表
)的 TiFlash 副本的状态:
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = '' and TABLE_NAME = ''
注:查询结果中:
AVAILABLE
字段表示该表的 TiFlash 副本是否可用。1 代表可用
,0 代表不可用
。
PROGRESS
字段代表同步进度,在 0.0~1.0 之间,1 代表至少 1 个副本已经完成同步。
使用案例:
SELECT * FROM information_schema.tiflash_replica
-- 验证是否使用副本
-- explain analyze select * from test1
手动指定查询所使用的存储模块(tikv/tiflash)
select /*+ read_from_storage(tikv[test1] )*/ * from test1;
select /*+ read_from_storage(tiflash[test1] )*/ * from test1;
Engine 隔离是通过配置变量来指定所有的查询均使用指定 engine 的副本,可选 engine 为 tikv 和 tiflash,分别有 2 个配置级别:
1、会话级别,即 SESSION 级别。设置语句:
#查询默认配置的引擎
select @@session.tidb_isolation_read_engines
#设置
set @@session.tidb_isolation_read_engines = "逗号分隔的 engine list";
或
set SESSION tidb_isolation_read_engines = "逗号分隔的 engine list";
会话级别的默认配置继承自 TiDB 实例级别
的配置,见 2。
2、TiDB 实例级别,即 INSTANCE 级别,和会话级别配置是交集关系。比如实例级别配置了 “tikv, tiflash”,而会话级别配置了 “tikv”,则只会读取 TiKV。
在 TiDB 的配置文件
添加如下配置项:
[isolation-read]
engines = ["tikv", "tiflash"]
实例级别的默认配置为 [“tikv”, “tiflash”]。
当 engine 配置为 “tikv, tiflash”,即可以同时读取 TiKV 和 TiFlash 副本,优化器会自动选择。
指定了 engine 后,对于查询中的表没有对应 engine 副本的情况(因为 TiKV 副本是必定存在的,因此只有配置了 engine 为 tiflash 而 TiFlash 副本不存在这一种情况),查询会报该表不存在该 engine 副本的错。