すべてのプロダクト
Search
ドキュメントセンター

PolarDB:TPC-C テスト手順

最終更新日:Mar 29, 2026

PolarDB-X 1.0 に対して TPC-C ベンチマークを実行し、トランザクション毎分-C(tpmC)単位でのオンライントランザクション処理(OLTP)スループットを測定します。

本テストは TPC Benchmark C(TPC-C)仕様に基づいていますが、すべての要件を満たすものではありません。そのため、公表されている公式の TPC-C ベンチマーク結果との比較はできません。

背景情報

TPC-C は、トランザクション処理パフォーマンス評議会(TPC)が維持する業界標準の OLTP パフォーマンステストであり、10 のテーブルと 5 種類のトランザクションで構成される卸売業者ワークロードをモデル化しています。

トランザクション機能概要
NewOrder新規注文を登録します
Payment注文の支払いを処理します
OrderStatus最新の注文を照会します
Delivery保留中の注文を配信します
StockLevel在庫不足の可能性を確認するための在庫レベルをチェックします

パフォーマンス指標は tpmC(transactions-per-minute-C)で報告され、これは最大許容スループット(MQTh)下で 1 分間に完了した NewOrder トランザクション数をカウントした値です。

テスト設計

データ規模

通常のインスタンスでは、テストに 1,000 ウェアハウスを使用します。

テーブル
bmsql_order_line3億
bmsql_stock1億
bmsql_customer3,000万
bmsql_history3,000万
bmsql_oorder3,000万

超大規模インスタンスのテストでは、PolarDB-X 1.0 の水平方向スケーラビリティを検証するため、10,000 ウェアハウスまでスケールアップします。ストレステストマシンのボトルネック化を防ぐため、3 台の 32 コア Elastic Compute Service (ECS) インスタンスをストレステストマシンとして使用します。

インスタンスの仕様

エディションPolarDB-X 1.0 ノードApsaraDB RDS for MySQL 5.7 インスタンス
Standard Edition2 ノード × 8 CPU コア、32 GB メモリ4 専用型インスタンス × 4 CPU コア、32 GB メモリ
エンタープライズ2 ノード × 16 CPU コア、64 GB メモリ4 専用型インスタンス × 8 CPU コア、32 GB メモリ
Ultra-large16 ノード × 16 CPU コア、64 GB メモリ12 専用型インスタンス × 32 CPU コア、128 GB メモリ

テスト開始前に、ご使用のエディションを選択してください。テスト手順はすべてのエディションで同一であり、インスタンスの仕様のみが異なります。

前提条件

開始する前に、以下の内容を確認してください。

  • VPC(Virtual Private Cloud)内に ECS インスタンスをデプロイ済みであること。VPC 名および VPC ID をメモしておき、以降のすべてのインスタンスは同一 VPC 内に配置する必要があります。

  • 同一 VPC 内に PolarDB-X 1.0 インスタンスが存在すること。「PolarDB-X 1.0 インスタンスの作成」をご参照ください。

  • PolarDB-X 1.0 インスタンスに tpcc という名前のデータベースがあること。「データベースを作成する」をご参照ください。

VPC 内にすべての ECS インスタンスおよび PolarDB-X 1.0 インスタンスを作成してください。一部のタイプのクラシックネットワークインスタンスでは、リソースが不足している場合があります。

TPC-C テストの実行

ステップ 1:テストツールのセットアップ

本テストでは BenchmarkSQL V5.0 を使用します。BenchmarkSQL はデフォルトで MySQL プロトコルをサポートしないため、MySQL 対応の事前コンパイル済みパッケージを提供しています。

  1. tpcc.tar.gz を ECS インスタンスにダウンロードし、展開します。

    mkdir tpcc
    tar zxvf tpcc.tar.gz -C tpcc

    コンパイル済みパッケージには、標準版 BenchmarkSQL に対する以下の変更が含まれています。

    ファイル変更内容
    src/client/jTPCC.javaMySQL タイプを追加
    src/client/jTPCCConnection.javaエイリアス経由で MySQL 構文をサポート
    src/LoadData/LoadData.javaデータ読み込み時の大規模トランザクション機構を無効化
    src/LoadData/LoadDataWorker.javaデータ読み込み時の大規模トランザクション機構を無効化
    run/funcs.shMySQL タイプを追加
    run/runDatabaseBuild.sh不要なフェーズを削除
    run/runBenchmark.shデフォルト JVM パラメーターを最適化
    run/runLoader.shデフォルト JVM パラメーターを最適化
    run/sql.common/foreignKeys.sqlすべての外部キー作成文をコメントアウト(PolarDB-X 1.0 は外部キーをサポートしません)
    run/sql.common/indexCreates.sqlプライマリキー文をコメントアウト;2 つのインデックス文を保持
    run/sql.common/indexDrops.sqlすべてのプライマリキー削除文をコメントアウト
    run/sql.common/tableCreates.sqlプライマリキーおよびシャードキーを追加
  2. run/props.mysql を編集し、接続情報およびテストパラメーターを設定します。

    パラメーター目的備考
    warehousesウェアハウス数(データ規模)通常:1,000、超大規模:10,000
    loadWorkers同時データローダー100 ワーカーで約 20,000 TPS を生成;runLoader.sh で JVM メモリを適宜設定
    terminalsストレステスト中の同時クライアント数ベンチマーク実行前に設定
    runMinsテスト持続時間(分)ベンチマーク実行前に設定
    // --------- 環境設定 --------- //
    db=mysql
    driver=com.mysql.jdbc.Driver
    conn=jdbc:mysql://drdsxxxx:3306/tpcc?useSSL=false&useServerPrepStmts=false&useConfigs=maxPerformance&rewriteBatchedStatements=true
    user=tpcc
    password=tpcc
    
    // ウェアハウス数。
    warehouses=1000
    // データインポート時に使用する並列ローダー数。
    // 100 ローダーで約 20,000 TPS を生成。
    // 100 ローダー用 JVM メモリ:4 GB、500 ローダー用:16 GB(runLoader.sh を編集)。
    loadWorkers=100
    
    // ストレステスト中の同時端末数。
    terminals=1000
    // テスト持続時間(分)。
    runMins=10
    // ---------- デフォルト設定 ------- //
    runTxnsPerTerminal=0
    limitTxnsPerMin=0
    
    terminalWarehouseFixed=true
    
    // トランザクション比率 — 合計が 100 になるように設定
    newOrderWeight=45
    paymentWeight=43
    orderStatusWeight=4
    deliveryWeight=4
    stockLevelWeight=4
    
    resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS

    設定が必要な主なパラメーター:

ステップ 2:テストデータのロード

重要

データロードは、テスト全体の中で最も時間がかかり、エラーが発生しやすい工程です。100 の並列 loadWorkers を使用して 5 億行以上のデータをインポートするため、数時間かかることがあります。SSH セッションが切断された場合でも継続して実行できるよう、nohup コマンドで実行してください。

cd tpcc/run
nohup ./runDatabaseBuild.sh props.mysql &

ステップ 3:ベンチマークの実行

cd tpcc/run
./runBenchmark.sh props.mysql

テスト実行中、BenchmarkSQL は進捗状況をコンソールにログ出力します。テスト完了後の出力例は以下の通りです。

08:56:16,844 [Thread-883] INFO   jTPCC : Term-00, Measured tpmC (NewOrders) = 104230.88
08:56:16,844 [Thread-883] INFO   jTPCC : Term-00, Measured tpmTOTAL = 231664.49
08:56:16,844 [Thread-883] INFO   jTPCC : Term-00, Session Start     = 2019-09-19 08:54:16
08:56:16,845 [Thread-883] INFO   jTPCC : Term-00, Session End       = 2019-09-19 08:56:16
08:56:16,845 [Thread-883] INFO   jTPCC : Term-00, Transaction Count = 465440

ステップ 4:結果の解釈

tpmC (NewOrders) の値が主要な測定結果です。これは、テストウィンドウ内で PolarDB-X 1.0 が 1 分間に処理した NewOrder トランザクション数を示します。

tpmTOTAL は、5 種類すべてのトランザクションをカバーします。tpmC は NewOrder トランザクションのみを対象とするため、tpmTOTAL は常に tpmC よりも高くなります。

各エディションの仕様に対するパフォーマンス評価を行うには、「テスト結果」セクションに記載されたリファレンス値とご自身の結果を比較してください。

ステップ 5:クリーンアップ

cd tpcc/run
./runDatabaseDestroy.sh props.mysql

テスト結果

同時実行性Standard Edition の tpmCEnterprise Edition の tpmCUltra-large の tpmC
1 ターミナル × 1,000 並列 loadWorkers65,735.14101,620.8
6 ターミナル × 1,000 並列 loadWorkers821,547.97