TPC-H Benchmark是由国际事务处理性能委员会(Transaction Processing Performance Council)发布的数据库领域权威测试标准之一,是被工业界和学术界普遍认可的决策支持测试标准,也是数据库选型的重要参考指标之一。本文介绍如何在EMR StarRocks集群通过TPC-H Benchmark进行性能测试。

TPC-H简介

以下文字描述引用自TPC Benchmark H (TPC-H)

“TPC-H是一个决策支持基准,由一套面向业务的临时查询和并发数据修改组成。选择的查询和填充数据库的数据具有广泛的行业相关性。该基准测试说明了决策支持系统可以检查大量数据,执行高度复杂的查询,并解答关键的业务问题。”

详情请参见TPCH Specification

说明 本文的TPC-H的实现基于TPC-H的基准测试,并不能与已发布的TPC-H基准测试结果相比较,本文中的测试并不符合TPC-H基准测试的所有要求。

前提条件

  • 已在E-MapReduce上创建用于测试的StarRocks集群,详情请参见创建StarRocks集群
  • 可选:已在OSS上创建存储空间,详情请参见创建存储空间
    说明 如果您要将测试数据集生成到OSS,则需要在OSS上创建存储空间。

操作步骤

  1. 获取工具包。
    1. 通过SSH方式连接StarRocks集群,请参见登录集群
    2. 执行以下命令,切换为emr-user用户。
      su - emr-user
    3. 执行以下命令,给emr-user用户授权。
      sudo chown emr-user:emr-user /home/emr-user
    4. 执行以下命令,下载starrocks-benchmark.tgz包。
      wget https://emr-public.oss-cn-beijing.aliyuncs.com/packages/starrocks-benchmark.tgz
    5. 执行以下命令,解压缩starrocks-benchmark.tgz包。
      tar xzf starrocks-benchmark.tgz
  2. 配置参数。
    1. 执行以下命令,进入starrocks-benchmark目录。
      cd starrocks-benchmark
    2. 修改以下配置文件。
      • hosts配置
        执行vim hosts命令,配置集群Master和Core节点的内网IP地址。
        [master]
        192.168.**.**
        
        [core]
        192.168.**.**
        
        [master:vars]
        ansible_ssh_common_args='-o StrictHostKeyChecking=no'
        
        [core:vars]
        ansible_ssh_common_args='-o StrictHostKeyChecking=no'
        IP
        说明 IP地址:需要您在新版控制台节点管理页签的emr_masteremr_core机器组下查看。当Master节点有多个内网IP地址时,只需填写一个内网IP地址即可。
      • all配置
        执行vim group_vars/all命令,配置Benchmark所需参数。
        # mysql client config
        login_host: 127.0.0.1
        login_port: 9030
        login_user: root
        login_password: ""
        
        # 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默认值为127.0.0.1。客户端连接StarRocks服务的参数。
        login_port默认值为9030。
        login_user为StarRocks的初始用户,默认值为root。
        login_password默认值为空。您可以自定义,为root用户设置密码。
        bucketOSS Bucket名称。OSS配置。可选参数,配置后测试数据集会生成到OSS。
        endpointOSS的访问域名。
        access_key_id阿里云账号的AccessKey ID。
        access_key_secret阿里云账号的AccessKey Secret。
        scale_factor数据集的比例因子。默认值为1。Benchmark配置。
        work_dir_root工作目录的根目录。默认值为/mnt/disk1/starrocks-benchmark/workdirs
        dataset_generate_root_path存放生成测试数据集的路径。默认值为/mnt/disk1/starrocks-benchmark/datasets

        如果配置了OSS,则会将对应的Bucket mount到该路径。

  3. 进行测试。
    执行以下命令,进行TPC-H测试。
    bin/run_tpch.sh

    全流程自动化进行TPC-H测试,包括Datasets、SQL Queries、tables的自动生成和加载、并执行Query。

    其他操作:
    • 执行以下命令,重新加载数据集。
      bin/run_tpch.sh reload
      说明 主要用于加载失败reload的场景。
    • 执行以下命令,单独执行TPC-H查询测试。
      bin/run_tpch.sh query
  4. 查看测试结果。
    • 测试结果概览。
      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语句、建表语句和执行日志等信息。filepath
      说明 本示例的<work_dir>/mnt/disk1/starrocks-benchmark/workdirs/tpc_h/sf1
      目录结果如下所示。
      <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工具包。
      您也可以通过命令cd <work_dir>/logs进入工作目录的Logs下,然后执行以下命令查看测试结果以及执行SQL的详细结果。
      cat run.log