本文为您介绍如何使用TPC-H(商业智能计算测试)对OLAP查询场景进行性能测试。
TPC-H简介
以下文字描述引用自TPC Benchmark H (TPC-H):
“TPC-H是一个决策支持基准,由一套面向业务的临时查询和并发数据修改组成。选择的查询和填充数据库的数据具有广泛的行业相关性。该基准测试说明了决策支持系统可以检查大量数据,执行高度复杂的查询,并解答关键的业务问题。”
详情请参见TPCH Specification。
本文的TPC-H的实现基于TPC-H的基准测试,并不能与已发布的TPC-H基准测试结果相比较,本文中的测试并不符合TPC-H基准测试的所有要求。
数据集简介
TPC-H是由国际事务处理性能委员会(Transaction Processing Performance Council)制定的用来模拟决策支持类应用的一个测试集。目前在学术界和工业界普遍采用它来评价决策支持技术方面应用的性能。
TPC-H是根据真实的生产运行环境来建模,模拟了一套销售系统的数据仓库。其共包含8张表,数据量可设定从1 GB~3 TB不等。其基准测试共包含了22个查询,主要评价指标各个查询的响应时间,即从提交查询到结果返回所需时间。测试结果可以综合反映系统处理查询时的能力。详情请参见TPC-H基准。
操作步骤
本测试场景直接使用TPC-H中的22条查询语句进行测试。测试数据量会直接影响测试结果,TPC-H的生成工具中使用SF(scale factor)控制生成数据量的大小,1SF对应1 GB。
以上数据量仅针对原始数据的数据量,不包括索引等空间占用,因此在准备环境时,您需要预留更多的空间。
准备工作。
您需要准备OLAP查询场景所需的基础环境。
说明为减少可能对测试结果有影响的变量,建议您每次使用新创建的实例进行测试,不要使用升降配的实例。
配置工具包参数。
登录ECS实例,详情请参见连接ECS实例。
执行以下命令,下载starrocks-benchmark测试工具包并解压。
wget https://emr-olap.oss-cn-beijing.aliyuncs.com/packages/starrocks-benchmark-for-serverless.tar.gz tar xzvf starrocks-benchmark-for-serverless.tar.gz
执行以下命令,进入starrocks-benchmark-for-serverless目录。
cd starrocks-benchmark-for-serverless
执行
vim group_vars/all
命令,配置Benchmark所需参数。# mysql client config login_host: fe-c-8764bab92bc6****-internal.starrocks.aliyuncs.com login_port: 9030 login_user: admin login_password: xxxx # oss config bucket: "" endpoint: "" access_key_id: "" access_key_secret: "" # benchmark config scale_factor: 1 work_dir_root: /mnt/disk1/starrocks-benchmark/workdirs dataset_generate_root_path: /mnt/disk1/starrocks-benchmark/datasets
参数详细描述如下表所示。
参数
描述
备注
login_host
StarRocks实例中FE的内网地址。
您可以在StarRocks实例的实例详情页签的FE详情区域,查看内网地址。
重要不建议使用公网地址。
客户端连接StarRocks服务的参数。
login_port
StarRocks实例中FE的服务端口,默认为9030。
您可以在StarRocks实例的实例详情页签的FE详情区域,查看查询端口。
login_user
StarRocks实例的初始用户。
login_password
StarRocks实例的初始用户的密码。
bucket
OSS Bucket名称。
可选参数,OSS配置。配置后测试数据集会生成到OSS。
endpoint
OSS的访问域名。
access_key_id
阿里云账号的AccessKey ID。
access_key_secret
阿里云账号的AccessKey Secret。
scale_factor
数据集的比例因子,控制生成数据量的大小。默认值为1,单位为GB。
Benchmark配置。
work_dir_root
工作目录的根目录,用于存放TPCH相关的建表语句、执行SQL等数据。默认值为/mnt/disk1/starrocks-benchmark/workdirs。
dataset_generate_root_path
存放生成测试数据集的路径。默认值为/mnt/disk1/starrocks-benchmark/datasets。
如果配置了OSS,则会将对应的Bucket mount到该路径。
执行以下命令,进行全流程自动化TPC-H测试。
bin/run_tpch.sh
全流程自动化进行TPC-H测试,主要包括database、table、22条SQL Queries、以及dataset的生成和加载、并执行Query进行测试。
其他操作:
执行以下命令,单独执行数据集加载。
bin/run_tpch.sh reload
执行以下命令,单独执行TPC-H查询测试。
bin/run_tpch.sh query
查看测试结果。
测试结果概览。
bin/run_tpch.sh
命令执行完后会直接输出测试结果。测试结果类似下所示。TASK [tpc_h : debug] **************************************************************************************************************************************** ok: [10.1.**.**] => { "command_output.stdout_lines": [ "[info] 2022-03-01 09:51:23.295 | Run sql queries started.", "[info] 2022-03-01 09:51:23.330 | Run q10.sql started.", "[info] 2022-03-01 09:51:23.913 | Run q10.sql finished. Time taken: 0:00:00, .557 seconds", "[info] 2022-03-01 09:51:23.923 | Run q11.sql started.", "[info] 2022-03-01 09:51:24.026 | Run q11.sql finished. Time taken: 0:00:00, .100 seconds", "[info] 2022-03-01 09:51:24.038 | Run q12.sql started.", "[info] 2022-03-01 09:51:24.192 | Run q12.sql finished. Time taken: 0:00:00, .151 seconds", "[info] 2022-03-01 09:51:24.204 | Run q13.sql started.", "[info] 2022-03-01 09:51:24.553 | Run q13.sql finished. Time taken: 0:00:00, .347 seconds", "[info] 2022-03-01 09:51:24.563 | Run q14.sql started.", "[info] 2022-03-01 09:51:24.665 | Run q14.sql finished. Time taken: 0:00:00, .098 seconds", "[info] 2022-03-01 09:51:24.675 | Run q15.sql started.", "[info] 2022-03-01 09:51:24.852 | Run q15.sql finished. Time taken: 0:00:00, .175 seconds", "[info] 2022-03-01 09:51:24.864 | Run q16.sql started.", "[info] 2022-03-01 09:51:25.008 | Run q16.sql finished. Time taken: 0:00:00, .142 seconds", "[info] 2022-03-01 09:51:25.018 | Run q17.sql started.", "[info] 2022-03-01 09:51:25.269 | Run q17.sql finished. Time taken: 0:00:00, .248 seconds", "[info] 2022-03-01 09:51:25.280 | Run q18.sql started.", "[info] 2022-03-01 09:51:25.800 | Run q18.sql finished. Time taken: 0:00:00, .518 seconds", "[info] 2022-03-01 09:51:25.810 | Run q19.sql started.", "[info] 2022-03-01 09:51:25.943 | Run q19.sql finished. Time taken: 0:00:00, .130 seconds", "[info] 2022-03-01 09:51:25.953 | Run q1.sql started.", "[info] 2022-03-01 09:51:26.295 | Run q1.sql finished. Time taken: 0:00:00, .339 seconds", "[info] 2022-03-01 09:51:26.305 | Run q20.sql started.", "[info] 2022-03-01 09:51:26.708 | Run q20.sql finished. Time taken: 0:00:00, .400 seconds", "[info] 2022-03-01 09:51:26.720 | Run q21.sql started.", "[info] 2022-03-01 09:51:27.323 | Run q21.sql finished. Time taken: 0:00:00, .600 seconds", "[info] 2022-03-01 09:51:27.334 | Run q22.sql started.", "[info] 2022-03-01 09:51:27.403 | Run q22.sql finished. Time taken: 0:00:00, .065 seconds", "[info] 2022-03-01 09:51:27.415 | Run q2.sql started.", "[info] 2022-03-01 09:51:27.632 | Run q2.sql finished. Time taken: 0:00:00, .213 seconds", "[info] 2022-03-01 09:51:27.648 | Run q3.sql started.", "[info] 2022-03-01 09:51:27.917 | Run q3.sql finished. Time taken: 0:00:00, .262 seconds", "[info] 2022-03-01 09:51:27.936 | Run q4.sql started.", "[info] 2022-03-01 09:51:28.150 | Run q4.sql finished. Time taken: 0:00:00, .210 seconds", "[info] 2022-03-01 09:51:28.172 | Run q5.sql started.", "[info] 2022-03-01 09:51:28.954 | Run q5.sql finished. Time taken: 0:00:00, .778 seconds", "[info] 2022-03-01 09:51:28.976 | Run q6.sql started.", "[info] 2022-03-01 09:51:29.080 | Run q6.sql finished. Time taken: 0:00:00, .103 seconds", "[info] 2022-03-01 09:51:29.096 | Run q7.sql started.", "[info] 2022-03-01 09:51:29.445 | Run q7.sql finished. Time taken: 0:00:00, .346 seconds", "[info] 2022-03-01 09:51:29.460 | Run q8.sql started.", "[info] 2022-03-01 09:51:32.692 | Run q8.sql finished. Time taken: 0:00:03, 3.229 seconds", "[info] 2022-03-01 09:51:32.703 | Run q9.sql started.", "[info] 2022-03-01 09:51:33.318 | Run q9.sql finished. Time taken: 0:00:00, .611 seconds", "[info] 2022-03-01 09:51:33.324 | Run sql queries finished. Time taken: 0:00:10, 10.026 seconds" ] } TASK [tpc_h : debug] ******************************************************************************************************************************************************************************** ok: [10.1.0.91] => { "work_dir": "/mnt/disk1/starrocks-benchmark/workdirs/tpc_h/sf1" }
测试结果详情。
成功执行
bin/run_tpch.sh
命令后,系统会构建好整个TPC-H测试的工作目录并输出<work_dir>目录的路径信息,您可以切换到该路径下查看相关的Query语句、建表语句和执行日志等信息。说明本示例的<work_dir>为/mnt/disk1/starrocks-benchmark/workdirs/tpc_h/sf1。
您可以通过命令
cd <work_dir>/logs
进入工作目录的Logs下,查看测试结果以及执行SQL的详细结果。<work_dir>的目录结果如下所示。
<work_dir>/ ├── config # run.sh run_mysql.sh脚本的配置。 ├── logs # 最近一次TPC-H执行日志。 │ ├── *.sql.err │ ├── *.sql.out │ └── run.log ├── queries # TPC-H涉及的22条SQL Query。 │ ├── ddl │ │ └── create_tables.sql # TPC-H建表语句。 │ └── *.sql ├── run_mysql.sh ├── run.sh # 全量执行TPC-H的Query。 └── tpch_tools # dbgen工具包。