作者:劉春雷
TiDB更新、TiFlash測試及對比ClickHouse
--2020-05-13 劉春雷
1、彙總
1.1、需求
測試3.0.7 更新至4.0.0-rc
測試部署TiFlash
測試TiFlash性能等
對比ClickHouse
1.2、結果

【結論】:
[1]、TiFlash可以提升OLAP的分析速度
[2]、TiFlash與ClickHouse對比,存在一定性能差距。
【差異原因】:
1、tiflash 因為需要支援 update,是以需要額外讀取三列:handle (int64), version(uint64), del_mark(uint8); 2、clickHouse的更新存在幾點問題:
- 無法保證一定更新成功,也無法确定啥時候更新成功,因為是背景慢慢做的,兩條相同的 key 不一定會merge
- 正确性無法保證,即有可能同時讀到幾個資料版本,至于資料庫的事務隔離性就更沒法做了
3、clickHouse 隻需要 scan,但是 tiflash 需要把資料做一次全局排序 + mvcc 過濾,這一步是最耗時的。
2、流程及部署
2.1、流程
1、更新至4.0.0-rc
2、部署TiFlash
3、添加表至tiflash
4、會話級别設定使用tikv及tiflash
5、測試查詢
2.2、機器資訊 編輯
叢集:xxx叢集
TiDB&PD 混合部署
TiKV*3
TiFlash *1
ClickHouse:為單機部署
2.3、部署叢集3.0.7版本
TiDB3.0.7叢集部署完成
2.4、更新至4.0.0-rc
【1】、打包4.0.0-rc版本 完成
【2】、執行更新 完成
注:自己開發的工具
tidb_manage --options=upgrade -c xxx -o 3.0.7 -n 4.0.0-rc
2.5、已有叢集部署TiFlash
2.5.1、設定
- 在 pd-ctl,開啟 PD 的 Placement Rules 功能。
cd tidb-ansible-4.0.0-rc-xxx/resources/bin
./pd-ctl -u "http:10.xxx.x.x:xxx" -i
config set enable-placement-rules true
2.5.2、部署
ssh tidb中控
su - tidb
cd tidb-4.0.0-rc-xxx
【1、配置】
配置 scale-out.yaml
【2、執行擴容】
tiup cluster scale-out TiflashTest scale-out.yaml Scaled cluster
TiflashTest
out successfully
3、測試
3.2、測試SQL資訊
4、對比ClickHouse
結果:
ClickHouse比TiFlash減少: 74.9%
SQL:
create database test;
CREATE TABLE test ENGINE = MergeTree order by id AS SELECT * FROM mysql(‘IP:port’, ‘db’, ‘test’, ‘user’, ‘password’);
【差異原因】:
1、tiflash 因為需要支援 update,是以需要額外讀取三列:handle (int64), version(uint64), del_mark(uint8); 2、clickHouse的更新存在幾點問題:
- 無法保證一定更新成功,也無法确定啥時候更新成功,因為是背景慢慢做的,兩條相同的 key 不一定會merge
- 正确性無法保證,即有可能同時讀到幾個資料版本,至于資料庫的事務隔離性就更沒法做了
3、clickHouse 隻需要 scan,但是 tiflash 需要把資料做一次全局排序 + mvcc 過濾,這一步是最耗時的。
5、TiFlash使用
45.1、使用步驟
【1、添加表至TiFlash】
alter table xxx SET TIFLASH REPLICA 1;
【2、檢視進度,需要available=1 後才可能使用到tiflash】
SELECT * FROM information_schema.tiflash_replica ;
- AVAILABLE 字段表示該表的 TiFlash 副本是否可用。1 代表可用,0 代表不可用。副本狀态為可用之後就不再改變,如果通過 DDL 指令修改副本數則會重新計算同步進度。
- PROGRESS 字段代表同步進度,在 0.0~1.0 之間,1 代表至少 1 個副本已經完成同步。
【3、設定引擎,會話級别】
set SESSION tidb_isolation_read_engines = “tikv”;
set SESSION tidb_isolation_read_engines = “tikv,tiflash”;
set SESSION tidb_isolation_read_engines = “tiflash”;
【4、執行具體SQL或執行計劃】
檢視執行計劃,如果有cop[tiflash],則說明使用到了tiflash