TiDB升级、TiFlash测试及对比ClickHouse
--2020-05-13 刘春雷
1、汇总
1.1、需求
测试3.0.7 升级至4.0.0-rc
测试部署TiFlash
测试TiFlash性能等
对比ClickHouse
1.2、结果
序列
SQL
表改成TiFlash命令
tikv时间
TiFlash时间
ClickHouse
百分比
12
举例模拟:
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`create_time` datetime DEFAULT NULL,
`num` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB ;
表数据:
8324
w
SQL:
select avg(num) from test where create_time >'2020-05-07 17:40:01';
alter table test SET TIFLASH REPLICA 1;
1 row in set (
5.19sec)
1 row in set (
0.80 sec)
1 row in set
0.041 sec
TiFlash比TiKV减少:
84.6%
ClickHouse比TiFlash减少:
74.9%
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
角色
机器
TiFlash/TiKV/ClickHouse
内存:192G
CPU:20*2 Intel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz
磁盘:3*1.8T SSD
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信息
序列
SQL
表改成TiFlash命令
tikv时间
TiFlash时间
百分比
12
举例模拟:
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`create_time` datetime DEFAULT NULL,
`num` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB ;
表数据:
8324
w
SQL:
select avg(num) from test where create_time >'2020-05-07 17:40:01';
alter table test SET TIFLASH REPLICA 1;
1 row in set (
5.19 sec)
1 row in set (
0.80 sec)
减少84.6%
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');
【差异原因】:
tiflash 因为需要支持 update,所以需要额外读取三列:handle (int64), version(uint64), del_mark(uint8)
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
【5、其他优化参数,会话级,待确认优化程度】
set @@tidb_opt_agg_push_down=1;
set @@tidb_opt_distinct_agg_push_down=1;