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_line | 3億 |
| bmsql_stock | 1億 |
| bmsql_customer | 3,000万 |
| bmsql_history | 3,000万 |
| bmsql_oorder | 3,000万 |
超大規模インスタンスのテストでは、PolarDB-X 1.0 の水平方向スケーラビリティを検証するため、10,000 ウェアハウスまでスケールアップします。ストレステストマシンのボトルネック化を防ぐため、3 台の 32 コア Elastic Compute Service (ECS) インスタンスをストレステストマシンとして使用します。
インスタンスの仕様
| エディション | PolarDB-X 1.0 ノード | ApsaraDB RDS for MySQL 5.7 インスタンス |
|---|---|---|
| Standard Edition | 2 ノード × 8 CPU コア、32 GB メモリ | 4 専用型インスタンス × 4 CPU コア、32 GB メモリ |
| エンタープライズ | 2 ノード × 16 CPU コア、64 GB メモリ | 4 専用型インスタンス × 8 CPU コア、32 GB メモリ |
| Ultra-large | 16 ノード × 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 対応の事前コンパイル済みパッケージを提供しています。
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プライマリキーおよびシャードキーを追加 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 の tpmC | Enterprise Edition の tpmC | Ultra-large の tpmC |
|---|---|---|---|
| 1 ターミナル × 1,000 並列 loadWorkers | 65,735.14 | 101,620.8 | — |
| 6 ターミナル × 1,000 並列 loadWorkers | — | — | 821,547.97 |