天天看點

TiDB更新、TiFlash測試及對比ClickHouse

作者:劉春雷​

TiDB更新、TiFlash測試及對比ClickHouse

--2020-05-13 劉春雷      

1、彙總

1.1、需求

測試3.0.7 更新至4.0.0-rc

測試部署TiFlash

測試TiFlash性能等

對比ClickHouse

1.2、結果

​​

TiDB更新、TiFlash測試及對比ClickHouse

​​

【結論】:

[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

TiDB更新、TiFlash測試及對比ClickHouse

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、設定

  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資訊

​​

TiDB更新、TiFlash測試及對比ClickHouse

​​

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’);

​​

TiDB更新、TiFlash測試及對比ClickHouse

​​

【差異原因】:

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 ;

​​

TiDB更新、TiFlash測試及對比ClickHouse

​​

  • 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

​​

TiDB更新、TiFlash測試及對比ClickHouse

​​