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

PolarDB:OLTP パフォーマンス テスト

最終更新日:Jun 09, 2025

このトピックでは、SysBench を使用して PolarDB for MySQL クラスタのオンライントランザクション処理 (OLTP) パフォーマンスをテストする方法について説明します。

テストツール

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

テスト環境

  • Elastic Compute Service (ECS) インスタンスと PolarDB for MySQL クラスタは、同じリージョン、ゾーン、および仮想プライベートクラウド (VPC) にあります。

    説明

    ECS インスタンスと PolarDB for MySQL クラスタは、同じ VPC 内にある必要があります。 パフォーマンス評価の有効性を確保するために、ECS インスタンスの ping レイテンシは 0.2 ミリ秒未満である必要があります。

  • 本文で使用される PolarDB for MySQL クラスタ:

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

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

  • テストで使用される ECS インスタンス:

    • インスタンスタイプは ecs.c5.4xlarge (16 コア、32 GB のメモリ) です。

    • インスタンスのイメージは 64 ビット CentOS 7.0 です。

    • インスタンスの数は、PolarDB クラスタによって異なります。 計算ノードに 8 コアある場合は、1 つの ECS インスタンスが使用されます。 計算ノードに 16 コアある場合は、2 つの ECS インスタンスが使用されます。

  • 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 コア以上) の場合は、クラスタリソースを最大限に活用するために追加のパラメータ調整が必要です。 特定の調整パラメータは、テストページのインスタンスタイプとビジネスシナリオによって異なります。 最適化を実装する前に徹底的なパフォーマンス評価を実行し、実際結果に基づいてパラメータを微調整することをお勧めします。

使用上の注意

このテストでは、それぞれ 25,000 行を含む 250 個のテーブルを持つデータセットを一貫して使用します。 スレッド数は、低い値から高い値に徐々に増加します。 パフォーマンステストの詳細ページには、ピークパフォーマンスの結果のみが表示されます。

テストシナリオ

OLTP パフォーマンス テストを実行して、さまざまな 専用仕様 のクラスタの読み取り専用、書き込み専用、および読み取り/書き込みパフォーマンスを評価します。 各クラスタは、1 つのプライマリノードと 1 つの読み取り専用ノードで構成されます。

メトリクス

  • 1 秒あたりのトランザクション数 (TPS): データベースで 1 秒あたりに実行されるトランザクション数。 コミットされたトランザクションのみがカウントされます。

  • 1 秒あたりのクエリ数 (QPS): データベースで 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. 次のコマンドを実行して、カーネルがすべて CPU コアを使用してパケットを処理できるように SysBench クライアントを構成します (デフォルト設定は 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はいPolarProxy を構成する クラスタの パラメータを に設定します。 詳細については、「」をご参照ください。

  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 読み取り専用)

    説明

    読み取り専用シナリオでは、パラメータ --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 読み取り/書き込み)

    説明
    • テストは、読み取り操作と書き込み操作が混在する一般的なビジネスワークロードをシミュレートします。

    • tables、table_size、threads などのコアパラメータは、テストデータページの各テストケースに個別に表示されます。

    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 書き込み専用)

    説明

    tables、table_size、threads などのコアパラメータは、テストデータページの各テストケースに個別に表示されます。

    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

    同時スレッド数

    現在構成されているスレッドの数。

    スレッドステータス

    スレッドの実行ステータス。

関連情報