創建TiFlash副本
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 = '<db_name>' and TABLE_NAME = '<table_name>'
注:查詢結果中:
AVAILABLE
字段表示該表的 TiFlash 副本是否可用。1 代表可用
,0 代表不可用
。
PROGRESS
字段代表同步進度,在 0.0~1.0 之間,1 代表至少 1 個副本已經完成同步。
使用案例:
SELECT * FROM information_schema.tiflash_replica
驗證查詢所走的是kv還是tiflash副本
-- 驗證是否使用副本
-- 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 副本的錯。