StarRocks2.0.1低基数全局字典优化测试

StarRocks2.0.1低基数全局字典优化测试

             --2022-01-24 春雷

1、汇总

1.1、前言

随着StarRocks的2.0.1版本的发布,解决了2.0.0-GA的低基数全局字典优化的部分问题,为官方的速度点个赞!再次进行了性能对比测试,目前线上已经上线了4套2.0.1版本,表现良好。

1.2、测试结论

  • 2.0.1使用低基数全局字典优化后,平均执行时间降低: 56.53% ,优化明显
  • 2.0.1的低基数全局字典优化需要一定信息采集才可以
  • 要确认是否使用低基数全局字典优化,可以查看执行计划

2、测试基本信息

测试程序机器:10.1.1.1

测试集群:xxx

测试计划:

对比 1.19.52.0.1 版本的低基数性能

3、测试模拟数据

3.1、模拟数据

【安装】:

cd /opt/soft/

wget https://starrocks-public.oss-cn-zhangjiakou.aliyuncs.com/ssb-poc-0.9.3.zip unzip ssb-poc-0.9.3.zip

cd ssb-poc
make && make install

【生成100G数据脚本 】:

cd /opt/soft/ssb-poc-0.9.3/ssb-poc/output
sh bin/gen-ssb.sh 100 data_dir

【修改配置】:

vim /opt/soft/ssb-poc-0.9.3/ssb-poc/output/conf/starrocks.conf

【如果没有pymysql需要安装下】:

/opt/soft/python3.6/bin/python3.6 -m pip install PyMySQL

【导入数据】:

cd /opt/soft/ssb-poc-0.9.3/ssb-poc/output

sh bin/stream_load.sh data_dir

【 插入数据到宽表lineorder_flat 】:

sh bin/flat_insert.sh

sql: ssb_flat_insert start
sql: ssb_flat_insert success

【表条数】:

4、测试结果

4.1、1.19.5的测试结果

4.2、升级版本

starrocks_manage cluster upgrade xxx 1.19.5 2.0.1

注:此工具为自开发工具

4.3、2.0.1测试结果

升级后立即执行测试,结果如下:

4.4、对比结果

现象:1.19.5升级到2.0.1 后,低基数的相关查询SQL,性能没有提升。

原因:执行计划没有走低基数全局字典优化,所以性能无变化

处理:

  • analyze table
  • 确认开启cbo_enable_low_cardinality_optimize=true

说明:analyze table 会收集统计信息,然后再发起查询的话,就会去收集字典,然后再查询应该就有了

4.5、分析表

analyze table lineorder;
Query OK, 0 rows affected (0.30 sec)

analyze table lineorder_flat;
Query OK, 0 rows affected (0.65 sec)

4.6、低基数优化说明

【查看执行计划】:

explain costs select count(*),lo_shipmode,lo_orderpriority from lineorder_flat group by lo_shipmode,lo_orderpriority;

【没有走低基数优化的执行计划】:

【走了低基数优化的执行计划】:

如果低基数全局字典生效了会有 dict_col 的字段

【说明】:

第一次查询的时候,没生效的话,如果是低基数的话,会触发收集,收集后的查询就生效了

4.6、2.0.1再次测试结果

均确认使用了低基数优化

5、对比

5.1、对比汇总

  • 2.0.1使用低基数全局字典优化后,平均执行时间降低: 56.53% ,优化明显
  • 2.0.1的低基数全局字典优化需要一定信息采集才可以
  • 要确认是否使用低基数优化,可以查看执行计划

你这个低基数有没有手动创建bitmap index,我创建bitmap index 在低基数测试时无效,不创建,反而cbo_enable_low_cardinality_optimize 设置true 和false 有些差距

"sh bin/gen-ssb.sh 100 data_dir"不应使用"sh"来执行,因为bin/gen-ssb.sh中已经指定了bash,并且bin/gen-ssb.sh已经有执行权限,直接"bin/gen-ssb.sh 100 data_dir"即可