このトピックでは、PolarDB-X のクラスター化カラムナインデックス (CCI) に対する TPC-H ベンチマークテストの設計、手順、および結果について説明します。
背景情報
TPC-H は、トランザクション処理性能評議会 (TPC) によって策定された、データベースの分析クエリ機能を評価するための意思決定支援ベンチマークです。TPC-H ワークロードは、8 つのテーブルと 22 の複雑な SQL クエリで構成されており、そのほとんどにテーブル結合、サブクエリ、GROUP BY 集計が含まれています。
このトピックで説明する TPC-H の実装は、公式の TPC-H ベンチマークに基づいています。ただし、このテストはすべての公式要件を満たしているわけではなく、結果は公開されている TPC-H ベンチマークの結果とは比較できません。
テスト設計
データセットサイズ
このテストでは、100 GB のデータセット (スケールファクター = 100) を使用します。主なテーブルは次のとおりです。
LINEITEM:約 6 億行
ORDERS:1.5 億行
PART_SUPP:8,000 万行
テストインスタンスの仕様
ノード仕様 | ノード数 | データセットサイズ |
8c32g | 2/4 | 100 GB |
16c64g | 2/3/4/6 | 100 GB |
ストレステストインスタンスの仕様
ecs.g7.4xlarge (16 vCPU、64 GB メモリ)
操作手順
手順1:ストレステスト用 ECS の準備
ECS インスタンスを 1 台準備します。このインスタンスは、データインポートやストレステストの実行など、後続のすべての操作で使用します。
ECS インスタンスを VPC にデプロイします。後続のすべてのインスタンスを同じ VPC にデプロイする必要があるため、VPC 名と ID をメモしてください。
ECS インスタンスには CentOS オペレーティングシステムを使用し、パブリック IP アドレスを割り当てることを推奨します。
手順2:PolarDB-X インスタンスの準備
PolarDB-X インスタンスを作成します。詳細な手順については、「インスタンスの作成」をご参照ください。
PolarDB-X インスタンスとストレステスト用 ECS インスタンスが同じ VPC 内にあることを確認してください。
ストレステスト用 ECS インスタンスの内部 IP アドレスを PolarDB-X インスタンスのホワイトリストに追加してください。
手順3:インスタンスパラメータの調整
ストレステストで最適なパフォーマンスを達成するために、PolarDB-X コンピュートノードのパラメータを調整してください。
XPROTO_MAX_DN_CONCURRENT パラメータを 4000 に設定します。詳細な手順については、「パラメータ設定」をご参照ください。
コマンドラインインターフェイス (CLI) を使用して PolarDB-X インスタンスに接続します。同じセッションで、次の SQL ステートメントを実行して、SQL ログ、CPU サンプリング、および自動統計情報収集を無効にします。
set global RECORD_SQL = false; set global MPP_METRIC_LEVEL = 0; set global ENABLE_CPU_PROFILE = false; set global ENABLE_BACKGROUND_STATISTIC_COLLECTION=false; set global ENABLE_STATISTIC_FEEDBACK=false;
手順4:Benchmark Boot ツールのインストール
ストレステスト用 ECS インスタンスのセキュリティグループでポート 4121 を開きます。詳細については、「セキュリティグループルールの追加」をご参照ください。
ストレステスト用 ECS インスタンスにログインし、
bash -c "$(curl -fsSL https://benchmark-boot.oss-cn-hangzhou.aliyuncs.com/setup.sh)"コマンドを実行して Benchmark Boot をインストールします。詳細については、「Benchmark Boot のダウンロードとインストール」をご参照ください。ブラウザで http://{ストレステストインスタンスのパブリック IP アドレス}:4121 を開きます。Benchmark Boot のホームページが表示され、インストールが成功したことを確認します。
手順5:データの準備
Benchmark Boot コンソールで、[ストレステスト] > [データベース接続] > [データベース接続の設定] の順に移動します。PolarDB-X の接続文字列 (ホスト IP アドレス、ポート、ユーザー名、パスワード) を設定します。TPC-H データベース名を入力し、[データベース作成モード] で [AUTO] を選択して、提出する をクリックします。
[ストレステスト] > [TPCH] > [TPC-H のインポート] の順に移動します。提出する を 100 に、提出する を 16 に設定します。提出する をクリックして、100 GB の TPC-H データセットを PolarDB-X プライマリインスタンスにインポートします。
説明データがインポートされた後、Benchmark Boot は自動的に
ANALYZE TABLEステートメントを実行して統計情報を収集します。100 GB の TPC-H データセットがインポートされた後、PolarDB-X プライマリインスタンスで次の SQL ステートメントを実行して、クラスター化カラムナインデックス (CCI) を作成します。詳細については、「CCI の作成と使用」をご参照ください。
create clustered columnar index `nation_col_index` on nation(`n_nationkey`) partition by hash(`n_nationkey`) partitions 1; create clustered columnar index `region_col_index` on region(`r_regionkey`) partition by hash(`r_regionkey`) partitions 1; create clustered columnar index `customer_col_index` on customer(`c_custkey`) partition by hash(`c_custkey`) partitions 64; create clustered columnar index `part_col_index` on part(`p_size`) partition by hash(`p_partkey`) partitions 64; create clustered columnar index `partsupp_col_index` on partsupp(`ps_partkey`) partition by hash(`ps_partkey`) partitions 64; create clustered columnar index `supplier_col_index` on supplier(`s_suppkey`) partition by hash(`s_suppkey`) partitions 64; create clustered columnar index `orders_col_index` on orders(`o_orderdate`,`o_orderkey`) partition by hash(`o_orderkey`) partitions 64; create clustered columnar index `lineitem_col_index` on lineitem(`l_shipdate`,`l_orderkey`) partition by hash(`l_orderkey`) partitions 64;説明SHOW COLUMNAR INDEXステートメントを実行して、CCI の現在のステータスを表示できます。詳細については、「SHOW COLUMNAR INDEX」をご参照ください。CCI の作成には約 45 分かかります。
手順6:読み取り専用カラムストアインスタンスの追加
PolarDB-X プライマリインスタンスに読み取り専用カラムストアインスタンスを追加します。詳細な手順については、「読み取り専用カラムストアインスタンスの追加」をご参照ください。
ストレステスト用 ECS インスタンスの内部 IP アドレスを PolarDB-X 読み取り専用カラムストアインスタンスのホワイトリストに追加してください。
手順7:TPC-H テストの実行
Benchmark Boot コンソールで、 の順に移動します。読み取り専用カラムストアインスタンスの接続文字列を設定し、TPC-H データベース名を入力し、[データベース作成モード] で [AUTO] を選択して、提出する をクリックします。
[ストレステスト] > [TPCH] > [TPCH の実行] の順に移動します。提出する を選択し、タスクの説明を入力して、[送信] をクリックして TPC-H ベンチマークの 22 のクエリステートメントを実行します。
の順に移動して、最終的なテスト結果を表示します。
説明最初のベンチマーク実行にはウォームアップが必要です。安定した結果を得るために、テストを複数回実行することを推奨します。
テスト結果
すべての実行時間は秒 (s) 単位です。
クエリ | 8c32g * 2 | 8c32g * 4 | 16c64g * 2 | 16c64g * 3 | 16c64g * 4 | 16c64g * 6 |
Q1 | 5.9 | 3.99 | 4.37 | 1.6 | 1.22 | 0.86 |
Q2 | 2.41 | 1.68 | 1.63 | 1.15 | 1.04 | 0.86 |
Q3 | 4.18 | 2.13 | 2.43 | 1.77 | 1.20 | 0.88 |
Q4 | 3.72 | 1.02 | 0.94 | 0.78 | 0.48 | 0.44 |
Q5 | 5.63 | 3.12 | 3.27 | 2.05 | 1.68 | 1.4 |
Q6 | 0.41 | 0.38 | 0.42 | 0.18 | 0.15 | 0.13 |
Q7 | 5.47 | 2.94 | 2.93 | 2.08 | 1.72 | 1.34 |
Q8 | 3.61 | 2.31 | 1.98 | 1.81 | 1.68 | 1.51 |
Q9 | 13.6 | 6.91 | 7.46 | 4.93 | 3.85 | 3.11 |
Q10 | 6.36 | 3.12 | 3.5 | 2.31 | 1.73 | 1.26 |
Q11 | 1.51 | 0.64 | 0.74 | 0.53 | 0.49 | 0.35 |
Q12 | 1.86 | 0.82 | 0.78 | 0.57 | 0.40 | 0.35 |
Q13 | 8.85 | 4.29 | 4.44 | 2.6 | 1.64 | 1.2 |
Q14 | 0.94 | 0.58 | 0.7 | 0.51 | 0.38 | 0.31 |
Q15 | 1.26 | 0.76 | 0.88 | 0.59 | 0.47 | 0.37 |
Q16 | 2.3 | 1 | 1.19 | 0.75 | 0.61 | 0.46 |
Q17 | 1.86 | 0.75 | 0.69 | 0.47 | 0.43 | 0.49 |
Q18 | 8.43 | 4.18 | 4.43 | 3.16 | 2.19 | 1.6 |
Q19 | 4.92 | 2.16 | 1.86 | 1.07 | 1.02 | 0.73 |
Q20 | 1.88 | 1.34 | 1.17 | 0.73 | 0.78 | 0.73 |
Q21 | 12.05 | 3.18 | 3.11 | 2.38 | 1.72 | 1.57 |
Q22 | 2.67 | 1.25 | 1.39 | 0.98 | 0.66 | 0.61 |
合計時間 | 99.82 | 48.55 | 50.31 | 33.00 | 25.54 | 20.56 |