作者简介:肖帆,OceanBase技术部技术专家,开源生态团队成员。2018年硕士毕业于华中科技大学软件工程专业,毕业后一直从事数据库领域的质量保障工作,曾就职于有赞、网易,参与关系型数据库、缓存数据库、对象存储相关产品的测试开发,目前的工作方向是OceanBase社区版性能测试。
2022 年 11 月 3 日, OceanBase 社区版 4.0 Beta 版本正式上线。发布现场的演练测试结果显示,OceanBase 社区版 4.0 在同等硬件环境下,OLTP(联机事务处理)性能是 MySQL 企业版的 1.9 倍,OLAP(联机分析处理)性能是 Greenplum 6.22.1 的 5 到 6 倍。其中,OLAP性能测试采用TPC-H(商业智能计算测试),这是国际事务交易处理性能委员会(TPC,Transaction Processing Performance Council)组织制定的用来模拟决策支持类应用的一个测试集,基于 3NF 实现了一个数据仓库,共包含 8 个基本关系,其主要评价指标是各个查询的响应时间。TPC-H已经成为世界上最为流行的OLAP 工作负载的benchmark测试程序,其测试结果也成为分析型数据库及HTAP数据库要的评测指标。
那么如何在 OceanBase 数据库上进行TPC-H 测试?最新开放的OceanBase 4.0 版本在TPC-H 测试方法上与之前有什么区别?本文将和你分享OceanBase 4.0 版本的TPC-H 基准测试方法和性能优化建议。
如何进行TPC-H 测试?
OBD一键自动化测试
OBD(OceanBase Deployer)是 OceanBase 社区版的安装部署工具,作为包管理器,可以用来管理 OceanBase 社区版所有的开源软件。为了帮助用户更简单、更快速地进行性能测试,OBD已集成了Sysbench、TPC-C、TPC-H三种常用的性能测试工具,你可以一键进行全流程的性能测试,测试过程中OBD会根据当前运行环境自动进行参数调优,以跑出最佳的性能。
在完成OBD及OceanBase 社区版安装后,你只需一条简单的命令,就可以完成整个TPC-H流程的测试:
obd test tpch obperf --tenant=tpch_mysql -s 100 --remote-tbl-dir=/tmp/tpch100
OBD 既可以全自动式一键进行TPC-H测试,也可以手动设置各种参数来白盒体验测试的各个步骤。下面介绍几个使用OBD进行TPC-H性能测试的重要参数。
- 查看流程及操作日志:如果你觉得OBD的执行过相对黑盒,想了解OBD一键测试的过程中具体进行了哪些操作,可以加上'-v',OBD将在控制台详细打印出整个操作的流程,包括生成数据、导数、参数调优、合并、执行查询SQL等所有的操作日志。
- 关闭数据文件传输:TPC-H 需要指定一台 OceanBase 目标服务器作为执行对象,在执行 TPC-H 测试前,OBD 会将测试需要的数据文件传输到指定机器的指定目录下,这些文件可能会比较大,如果你在目标机器上准备好数据文件,可以通过 '--dt=true' 选项关闭传输。直接从导数步骤开始进行TPC-H测试
- 执行查询SQL:如果你已经完成了导数,只是想简单的执行下查询SQL,可以加上'--test-only=true',OBD仅仅会进行参数调优,并执行22条查询语句,操作完成后,还会自动将调优参数恢复成系统默认值。如果你想手动感受参数调优带来的性能差异,可以再加上'-O 0',这样OBD将不会进行任何参数调优,仅仅执行查询语句。你可以自由组合各种参数,感受各个参数带来的性能收益。
可以看到,通过OBD来进行TPC-H测试,可谓是“手自一体”,既可以全自动式一键运行,也可以手动设置各种参数来白盒体验测试的各个步骤。
手动进行TPC-H测试
当然,你也可能想通过原始的流程,来手动体验整个TPC-H的测试。OceanBase官网也提供了详细的测试流程和步骤。这里主要对4.0版本,与之前3.x版本的步骤差异,进行介绍。
- 参数调整:OceanBase 4.0版本引入了向量化和存储下压等新的特性,这些特性对性能提升有重大影响。不过需要注意的是,存储下压和向量化设置后,如果在之前执行过query,一定要刷新plan cache才生效,以避免因前期执行query导致旧的plan cache被命中。
- 建表语句调整:由于扫表的性能的提升,OceanBase 4.0版本后,不需要额外加索引。另外建表时,可以将编码格式指定为CONDENSED,数据会被编码,以selective encoding 格式保存,有利于提升查询的性能。
- 合并步骤调整:4.0引入了租户级别的合并,所以在执行合并命令时,需要在对应的租户下执行,或在系统租户下指定合并的租户。相应的合并相关的内部表也进行了调整,用户可以在系统租户下查询CDB_OB_MAJOR_COMPACTION,获取所有租户合并的全局信息。
- 手动收集统计信息:4.0版本后,合并不再收集统计信息,需要手动进行统计信息的收集。在OceanBase优化器中,统计信息有表统计信息(table level statistics)和列统计信息(column level statistics)两种。统计信息收集后,优化器的估算会更准确,生成的执行计划也会更快。目前 OceanBase 优化器针对统计信息收集提供了两种方式:DMBS_STATS(推荐)、ANALYZE 命令行。使用OBD或者OCP部署的用户,可以使用自带的DMBS_STATS包,通过call dbms_stats.gather_table_stats等方式进行统计信息的收集。如果使用ANALYZE的方式,MySQL租户需要开启SQL拓展功能(执行alter system set enable_sql_extension=True),你也可以设置_force_parallel_query_dop,提升统计信息收集的执行并发度。
重要参数解析
1. 向量化参数: _rowsets_enabled
4.0 增加向量化执行功能(vectorization),使得OceanBase 具备一次处理多行数据的能力,大幅减少函数调用次数和指令调用cache miss,提高SQL执行器能力。
为了提高SQL执行器的灵活性,我们提供了配置项_rowsets_enabled ,控制整个向量化执行的开启关闭。向量化是租户级配置项,在系统租户下执行一定要指定租户名,或者在普通租户下执行。向量化影响所有SQL的RT(响应时间),一定要开启。
2. 存储下压参数: _pushdown_storage_level
随着对AP场景不断深入优化,存储层引入了多个将过滤、计算下压到底层的新特性,由配置项_pushdown_storage_level进行控制,当_pushdown_storage_level设置为3时,将开启静态数据快速扫描filter下推及聚合下推。存储层将提前对数据进行计算或者过滤,从而减少无效数据的处理,提升计算效率。
TPC-H测试结果解读
以下测试结果的硬件环境,均为3台32C 128G(ecs.g7.8xlarge)节点、每台机器上挂载3块500G ESSD云盘,测试数据量为100GB。
- 相比上一个版本,OceanBase 4.0带来了哪些变化?
我们将OceanBase 社区版 4.0与OceanBase 社区版3.1.0进行 TPC-H 100GB测试对比,按照顺序执行22条查询SQL。从数据上来看,整体性能提升了5倍。
- 相比开源OLAP数据库,OceanBase 4.0带来了哪些新可能?
我们将OceanBase 社区版4.0.与Greenplum 6.22.1进行TPC-H性能对比,从实际测试数据上可以看到,同等硬件条件下,OceanBase 社区版4.0 的AP能力是Greenplum 6.22 的5-6倍,部分场景下性能差异可达到9倍。
写在最后
TPC-H标准的22条标准SQL中,包含了用户数据分析SQL里常用的聚合分析、连接查询、表达式计算、子查询等操作,反映了数据库在并发查询、表扫描、filter下压等方面的通用能力。OceanBase在TPC-H测试中响应时间的大幅降低,体现了OceanBase在OLAP方面能力的不断突破。
从2010年开始立项的OceanBase,一直是原生分布式数据库的信仰者、开拓者。我们希望能够基于“一个系统,一份数据” 为用户提供同时处理交易和实时分析的高性价比能力。 自登顶TPC-C榜首,OceanBase也在不断稳步迈进,提升OLAP的能力。4.0版本OceanBase的实时分析能力,无论是相对3.x版本,还是专门的 OLAP 数据库,都有了质的飞跃。我们希望真正帮助企业解决传统ETL带来的数据同步延迟和业务复杂度问题,使用户在实际场景中,能够同时兼顾到OLTP类的事务处理和OLAP类的报表分析、业务决策等实时分析能力,让数据库服务和业务应用变得简单,让成本大幅降低。
欢迎持续关注 OceanBase 技术社区,我们将不断输出技术干货内容,与千万技术人共同成长!!!
搜索🔍钉钉群(33254054),或扫描下方二维码,还可进入 OceanBase 技术答疑群,有任何技术问题在里面都能找到答案哦~