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

PolarDB:パフォーマンスのテスト方法 (OLTP)

最終更新日:Jan 31, 2026

このトピックでは、Sysbench ツールを使用して PolarDB for MySQL クラスターのオンライン トランザクション処理 (OLTP) 負荷パフォーマンスをテストする方法について説明します。このトピックの手順に従って独自のテストを実行し、ご利用のデータベースシステムのパフォーマンスを迅速に把握できます。

テストツール

Sysbench は、オープンソースでクロスプラットフォームのパフォーマンステストツールです。主に MySQL などのデータベースベンチマークや、CPU、メモリ、I/O、スレッドなどのシステムパフォーマンステストに使用されます。Sysbench はマルチスレッドテストをサポートし、Lua スクリプトを使用してテストロジックを柔軟に制御できるため、データベースのパフォーマンス評価やストレステストに適しています。

テスト環境

  • テスト用の Elastic Compute Service (ECS) インスタンスと PolarDB for MySQL クラスターは、同じリージョン、ゾーン、VPC ネットワーク内に配置する必要があります。

    説明

    ECS インスタンスと PolarDB for MySQL クラスターは同じ VPC 内に配置する必要があります。これにより、ECS インスタンスからの PING レイテンシーが 0.2 ms 未満に抑えられ、有効なパフォーマンス評価が保証されます。

  • テストに使用する PolarDB for MySQL クラスターは次のとおりです:

    • 読み取り専用、書き込み専用、および読み取り/書き込みのパフォーマンステストでは、2 ノードクラスター (プライマリノード 1 つと読み取り専用ノード 1 つ) を使用します。

    • 使用するエンドポイントには、プライマリエンドポイント、クラスターエンドポイント、カスタムエンドポイントが含まれます。テスト中は、データベースクラスターのリソースを最大限に活用するために、必要に応じて接続文字列の組み合わせを調整します。

  • テスト用の ECS インスタンスの情報は次のとおりです:

    • インスタンスタイプ:ecs.c5.4xlarge (16 CPU コア、32 GB メモリ)。

    • イメージ:CentOS 7.0 64 ビット。

    • インスタンスの数は PolarDB クラスターによって異なります。8 コアのコンピュートノードの場合は ECS インスタンスを 1 台使用します。16 コアのインスタンスタイプの場合は ECS インスタンスを 2 台使用し、以降も同様です。

  • PolarDB for MySQL クラスターのパラメーター設定:

    • 高同時実行テスト中に、can't create more than max_prepared_stmt_count statements エラーが発生し、テストが失敗することがあります。max_prepared_stmt_count パラメーターの値を増やして、より多くのプリペアドステートメントを許可してください。パラメーター設定の詳細については、「クラスターパラメーターとノードパラメーターの設定」をご参照ください。

    • 大規模かつ高同時実行のシナリオでは、max_prepared_stmt_count パラメーターを最大値に設定しても十分ではない場合があります。パフォーマンステストをスムーズに実行するために、テストコマンドに --db-ps-mode=disable パラメーターを追加して、プリペアドステートメント機能を無効にしてください。

    • 超大規模クラスター (88 コア以上) の場合、クラスターリソースを完全に活用するには、追加のパラメーターチューニングが必要です。具体的なチューニングパラメーターは、テストページのインスタンスタイプとビジネスシナリオによって異なります。最適化を実施する前に、徹底的なパフォーマンス評価を行い、実際の結果に基づいてパラメーターを微調整してください。

注意事項

このテストでは、tables=250 と table-size=25000 を使用します。threads の値は段階的に増加させます。各パフォーマンステストの製品ページには、ピーク結果のみが表示されます。

テストシナリオ

このテストでは、さまざまな専用インスタンスタイプにわたって、2 ノードクラスター (プライマリノード 1 つと読み取り専用ノード 1 つ) での読み取り専用、書き込み専用、および読み取り/書き込みシナリオの OLTP パフォーマンスを測定します。

メトリクス

  • TPS (1 秒あたりのトランザクション数):データベースが 1 秒あたりに実行するトランザクションの数で、成功した COMMIT の数に基づきます。

  • QPS (1 秒あたりのクエリ数):データベースが 1 秒あたりに実行する SQL 文 (INSERT、SELECT、UPDATE、DELETE を含む) の数。

Sysbench のインストール

重要

このドキュメントのコマンドは、root 権限を持つユーザーのみが実行できます。

  1. ECS インスタンスで次のコマンドを実行して、Sysbench をインストールします。

    git clone https://github.com/akopytov/sysbench.git
    ## Git から Sysbench をダウンロード
    
    cd sysbench
    ## Sysbench ディレクトリを開く
    
    ./autogen.sh
    ## autogen.sh を実行
    
    ./configure
    
    make -j
    ## コンパイル
    
    make install
  2. 次のコマンドを実行して Sysbench クライアントを設定します。これにより、カーネルがすべての CPU コアを使用してデータパケットを処理できるようになり (デフォルトは 2 コア)、CPU コア間のコンテキストスイッチが削減されます。

    sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffff>$x/rps_cpus; done'
    説明

    ffff は 16 コアが使用されることを示します。ご利用の構成に基づいてこの値を変更してください。たとえば、ECS インスタンスに 8 コアがある場合は ff と入力し、16 コアがある場合は ffff と入力します。

    sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries"
    sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt"
    sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt"

テスト方法

説明

以下のテスト方法は、PolarDB for MySQL クラスター版クラスターを例として使用します。

  1. PolarDB for MySQL クラスターのエンドポイントとポートを取得します。詳細については、「接続アドレスの管理」をご参照ください。

  2. PolarDB for MySQL クラスターエンドポイントに対して、プライマリノードによる読み取りリクエストの許可[はい] に設定します。詳細については、「データベースプロキシの設定」をご参照ください。

  3. データベースへのログイン

    ECS インスタンスで次のコマンドを実行して、PolarDB for MySQL クラスターに testdb という名前のデータベースを作成します。

    mysql -h XXX -P XXX -u XXX -p XXX -e 'create database testdb'
    説明

    このコマンドおよび後続のコマンドの XXX を、ご利用の PolarDB for MySQL クラスターのクラスターエンドポイント、ポート番号、ユーザー名、パスワードに置き換えてください。パラメーターは次のように説明されます。

    パラメーター

    説明

    -h

    PolarDB for MySQL クラスターのクラスターエンドポイント。

    -P

    PolarDB for MySQL クラスターのポート番号。

    -u

    PolarDB for MySQL クラスターのユーザー名。

    -p

    ユーザー名のパスワード。

  4. 特定のシナリオのテストコマンドは次のとおりです:

    読み取り専用シナリオのテスト (OLTP Read Only)

    説明

    この読み取り専用シナリオでは、--range-selects=0 が設定されており、これは oltp_point_selects シナリオのテストに相当します。

    1. データの準備

      sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_only prepare
    2. 読み取り専用テストの実行

      sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_only run
    3. データのクリーンアップ

      sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_only cleanup

    テスト文のフィールドは次のように説明されます:

    パラメーターカテゴリ

    表示内容

    説明

    tables

    データテーブル数

    テスト内のデータテーブルの総数。

    table_size

    データテーブルの行数

    各テーブルのレコード数。

    データボリュームサイズ

    テーブルのデータ量 (MB、GB などの単位)。

    threads

    同時実行スレッド数

    現在設定されているスレッド数。

    スレッドステータス

    スレッドの実行ステータスをリアルタイムで表示できます。

    読み取り/書き込み混合テスト (OLTP Read Write)

    説明
    • これは、典型的な読み取り/書き込み混合のビジネスワークロードをシミュレートします。

    • tables、table-size、threads などのコアパラメーターは、テストデータページに 1 対 1 で表示されます。

    1. データの準備

      sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_write prepare
    2. 読み取り/書き込みテストを実行する

      sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_write run
    3. データのクリーンアップ

      sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_write cleanup

    テスト文のフィールドは次のように説明されます:

    パラメーターカテゴリ

    表示内容

    説明

    tables

    データテーブル数

    テスト内のデータテーブルの総数。

    table_size

    データテーブルの行数

    各テーブルのレコード数。

    データボリュームサイズ

    テーブルのデータ量 (MB、GB などの単位)。

    threads

    同時実行スレッド数

    現在設定されているスレッド数。

    スレッドステータス

    スレッドの実行ステータスをリアルタイムで表示できます。

    書き込み専用テスト (OLTP Write Only)

    説明

    tables、table-size、threads などのコアパラメーターは、テストデータページに 1 対 1 で表示されます。

    1. データの準備

      sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_write_only prepare
    2. 書き込みテストの実行

      sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_write_only run
    3. データのクリーニング

      sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_write_only cleanup

    テスト文のフィールドは次のように説明されます:

    パラメーターカテゴリ

    表示内容

    説明

    tables

    データテーブル数

    テスト内のデータテーブルの総数。

    table_size

    データテーブルの行数

    各テーブルのレコード数。

    データボリュームサイズ

    テーブルのデータ量 (MB、GB などの単位)。

    threads

    同時実行スレッド数

    現在設定されているスレッド数。

    スレッドステータス

    スレッドの実行ステータスをリアルタイムで表示できます。

次のステップ