このトピックでは、TPC-H ベンチマークを使用して、オンライン分析処理 (OLAP) クエリシナリオの性能テストを実行する方法について説明します。
TPC-H
TPC Benchmark H (TPC-H) からの引用は次のとおりです:
「TPC-H は意思決定支援ベンチマークです。ビジネス指向のアドホッククエリと同時データ変更のスイートで構成されています。クエリとデータベースに移入されるデータは、業界全体で幅広く関連性を持つように選択されています。このベンチマークは、大量のデータを調査し、非常に複雑なクエリを実行し、重要なビジネス上の質問に回答する意思決定支援システムを示しています。」
詳細については、「TPCH 仕様書」をご参照ください。
この TPC-H の実装は TPC-H ベンチマークに基づいていますが、公式要件に完全に準拠しているわけではありません。したがって、これらの結果は、公式に公開されている TPC-H ベンチマークの結果と比較することはできません。
データセット
TPC-H ベンチマークは、意思決定支援アプリケーションをシミュレートするために Transaction Processing Performance Council (TPC) によって開発されました。学術界や産業界で、意思決定支援技術の性能を評価するために広く使用されています。
TPC-H は、現実の本番環境に基づいた販売システムのデータウェアハウスをモデル化しています。8 つのテーブルが含まれ、データ量は 1 GB から 3 TB まで設定できます。ベンチマークには 22 のクエリが含まれ、主要なメトリックは、送信から結果が返されるまでの各クエリの応答時間です。テスト結果は、システムのクエリ処理能力の包括的な概要を提供します。詳細については、「TPC-H ベンチマーク」をご参照ください。
操作手順
このテストでは、TPC-H ベンチマークの 22 のクエリを使用します。テスト結果はデータ量に直接影響されます。TPC-H データジェネレーターは、スケールファクター (SF) を使用して生成されるデータ量を制御します。1 SF は 1 GB のデータに相当します。
指定されたデータ量は生データのみを指し、インデックスに必要な領域は含まれません。したがって、環境を準備する際には、追加のストレージ容量をプロビジョニングする必要があります。
-
環境の準備
OLAP クエリシナリオに必要なリソースを準備します。
説明一貫した結果を得るために、各テストには新しいインスタンスを使用してください。スケールアップまたはスケールダウンされたインスタンスの使用は避けてください。
-
ECS インスタンスの作成。詳細については、「ECS インスタンスの作成」をご参照ください。
このテスト用の ECS インスタンスは、次のように設定されています:
-
インスタンスタイプ: ecs.g6e.4xlarge
-
オペレーティングシステム: CentOS 7.9
-
データディスク: ESSD (エンタープライズ SSD)。ディスク容量はテストデータ量によって異なります。
-
-
StarRocks インスタンスの作成。詳細については、「インスタンスの作成」をご参照ください。
このテストでは、バックエンド (BE) は 8 計算ユニット (CU) で構成され、8 CPU コアと 32 GB のメモリを提供します。ビジネス要件に基づいて構成を選択できます。
説明StarRocks インスタンスと ECS インスタンスは、同じリージョンおよび Virtual Private Cloud (VPC) 内に作成してください。
-
-
ツールキットのパラメーターの設定
-
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コマンドを実行して、ベンチマークテストのパラメーターを設定します。# 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 インスタンスの Instance Details タブで、[FE 詳細] セクションの イントラネットアドレス でエンドポイントを確認します。
重要パブリックエンドポイントの使用は避けてください。
StarRocks クライアントの接続パラメーター。
login_port
StarRocks インスタンスの FE のクエリポート。デフォルト値は 9030 です。
ご利用の StarRocks インスタンスの Instance Details タブで、[FE 詳細] セクションの Query Port でポートを確認します。
login_user
StarRocks インスタンスの初期ユーザー。
login_password
StarRocks インスタンスの初期ユーザーのパスワード。
bucket
OSS バケットの名前。
任意。OSS の設定。これらのパラメーターを設定すると、ツールキットはテストデータセットを生成し、OSS に保存します。
endpoint
OSS にアクセスするためのエンドポイント。
access_key_id
ご利用の Alibaba Cloud アカウントの AccessKey ID。
access_key_secret
ご利用の Alibaba Cloud アカウントの AccessKey Secret。
scale_factor
データセットのスケールファクター。データ量を制御します。デフォルト値は 1 です。単位は GB です。
ベンチマークの設定。
work_dir_root
ルート作業ディレクトリ。TPC-H のテーブル作成 SQL、実行された SQL、およびその他のアーティファクトを保存します。デフォルト値は /mnt/disk1/starrocks-benchmark/workdirs です。
dataset_generate_root_path
生成されたテストデータセットを保存するためのパス。デフォルト値は /mnt/disk1/starrocks-benchmark/datasets です。
OSS を設定した場合、指定されたバケットがこのパスにマウントされます。
-
-
次のコマンドを実行して、自動化されたエンドツーエンドの TPC-H テストを実行します。
bin/run_tpch.shこのコマンドは、データベースとテーブルの作成、データセットの生成とロード、22 の SQL クエリの実行を含む、TPC-H テストプロセス全体を自動化します。
その他の操作:
-
データセットのみをロードするには、次のコマンドを実行します。
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> ディレクトリへのパスを出力します。このディレクトリに切り替えて、クエリ文、テーブル作成文、実行ログなどの関連情報を表示できます。TASK [tpc_h : debug] **************************************************** ok: [10.1.0.91] => { "work_dir": /mnt/disk1/starrocks-benchmark/workdirs/tpc_h/sf1 }説明この例では、<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 # 22 の TPC-H SQL クエリ。 │ ├── ddl │ │ └── create_tables.sql # TPC-H テーブル作成 SQL。 │ └── *.sql ├── run_mysql.sh ├── run.sh # すべての TPC-H クエリを実行。 └── tpch_tools # dbgen ツールキット。
-