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

テストツール

SysBench は、負荷の高いデータベースを実行するシステムのコア動作パラメーターを評価するために使用される、モジュラー、クロスプラットフォーム、かつマルチスレッドのベンチマークツールです。 SysBench は、複雑なベンチマーク設定を設定したり、データベースエンジンをインストールしたりすることなく、データベースのパフォーマンスをテストできるように設計されています。

テスト環境

  • Elastic Compute Service (ECS) インスタンスと ApsaraDB for PolarDB MySQL クラスターがテストに使用され、同じリージョンおよびゾーンにデプロイしておく必要があります。 このテストでは、どちらも中国 (杭州) リージョンのゾーン I に配置されています。
  • ECS インスタンスと ApsaraDB for PolarDB MySQL クラスターの両方に対して、ネットワークタイプとして VPC を選択します。
    ECS インスタンスと ApsaraDB for PolarDB MySQL クラスターが同じ VPC ネットワークに接続されていることを確認してください。
  • テスト用の ApsaraDB for PolarDB MySQL クラスターは次のとおりです。
    • ノードの仕様は polar.mysql.x4.large (4 コア、16 GB) です。
    • 読み取り専用、書き込み専用、読み取り/書き取りのパフォーマンスは、1 つのプライマリノードと 1 つの読み取り専用ノードから構成される 2 ノードクラスターを使用してテストします。 マルチノードクラスターのパフォーマンスは、1 つのプライマリノードと 1〜8 つの読み取り専用ノードから構成される 2〜9 ノードクラスターを使用してテストされます。
    • クラスターエンドポイントを使用してクラスターに接続します。 クラスターエンドポイントを照会する方法については、「エンドポイントの表示」をご参照ください。
  • テスト用の ECS インスタンスは次のとおりです。
    • インスタンスタイプは ecs.c5.4xlarge です。
    • インスタンスで使用されるイメージは CentOS 7.0 (64 ビット) です。

テストシナリオ

異なる仕様の ApsaraDB for PolarDB MySQL クラスターのパフォーマンスを次の観点からテストします:読み取り専用パフォーマンス、書き込み専用パフォーマンス、読み取り/書き込みパフォーマンス、および複数の読み取り専用ノードの場合の読み取り専用パフォーマンス。

パフォーマンスの測定には、以下のメトリクスが使用されます。

  • 1 秒あたりのトランザクション (TPS):1 秒あたりに ApsaraDB for PolarDB MySQL クラスターで 実行されたトランザクションの数。 コミットされたトランザクションの数のみがカウントされます。
  • 1 秒あたりのクエリ数 (QPS):1 秒あたりに ApsaraDB for PolarDB MySQL クラスターで 実行される INSERT、SELECT、UPDATE、DELETE 文などの SQL 文 の数。

SysBench のインストール

  1. ECS インスタンスで以下のコマンドを実行し、SysBench をインストールします。
    yum install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel git mysql
    
    git clone https://github.com/akopytov/sysbench.git
    ## Download SysBench from GitHub
    
    cd sysbench
    ## Open the SysBench directory
    
    git checkout 1.0.18
    ## Switch to the SysBench version 1.0.18
    
    ./autogen.sh
    ## Run autogen.sh
    
    ./configure --prefix=/usr --mandir=/usr/share/man
    
    make
    ## Compile SysBench.
    
    make install
  2. 次のコマンドを実行して SysBench クライアントを設定し、クロスコアコンテキストスイッチを最小限に抑え、利用可能なすべての CPU コアを使用して、データを処理できるようにします。 デフォルトでは、2 つの CPU コアが使用されます。
    sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffffffff>$x/rps_cpus; done'
    ffffffff はデータの処理に 32 コアが使用されていることを示します。 必要に応じてコマンドを変更します。 たとえば、ECS インスタンスに 8 つのコアがある場合は、ff と入力します。
    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"

テスト手順

  1. ApsaraDB for PolarDB MySQL クラスターのクラスターエンドポイントとポートを照会します。 詳細については、「エンドポイントの表示」をご参照ください。
  2. ECS インスタンスで次のコマンドを実行して、ApsaraDB for PolarDB MySQL クラスターに testdb という名前のデータベースを作成します。
    mysql -h XXX -P XXX -u XXX -p XXX -e 'create database testdb'
    このコマンドと後続のコマンドの 4 つの XXX を、それぞれ ApsaraDB for PolarDB MySQL クラスターのクラスターエンドポイント、ポート番号、ユーザー名、およびパスワードに置き換えます。
    パラメーター 説明
    -h ApsaraDB for PolarDB MySQL クラスターのクラスターエンドポイント。
    -P ApsaraDB for PolarDB MySQL クラスターのポート番号。
    -u ApsaraDB for PolarDB MySQL クラスター接続に使用するユーザー名。
    -p ユーザーのパスワード。
  3. SysBench を使用して、2 ノードの ApsaraDB for PolarDB MySQL クラスターの読み取り専用パフォーマンスをテストします。 このプロセスは全体で 10 分かかります。
    sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_read_only prepare
    ## Prepare test data
    
    sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --range_selects=0 --skip-trx=1 --report-interval=1 oltp_read_only run
    ## Run workloads
    
    sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --range_selects=0 oltp_read_only cleanup
    ## Clear temporary data
  4. SysBench を使用して、2 ノードの ApsaraDB for PolarDB MySQL クラスターの書き込み専用パフォーマンスをテストします。 このプロセスは全体で 10 分かかります。
    sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_write_only prepare
    ## Prepare test data
    
    sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --report-interval=1 oltp_write_only run
    ## Run workloads
    
    sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 oltp_write_only cleanup
    ## Clear temporary data
  5. SysBench を使用して、2 ノードの ApsaraDB for PolarDB MySQL クラスターの読み取り/書き込みパフォーマンスをテストします。 このプロセスは全体で 10 分かかります。
    sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 oltp_read_write prepare
    ## Prepare test data
    
    sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 --threads=XXX --percentile=95 —report-interval=1 oltp_read_write run
    ## Run workloads
    
    sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 --threads=XXX --percentile=95 oltp_read_write cleanup
    ## Clear temporary data
  6. SysBench を使用して、2 ノード、3 ノード、4 ノード、5 ノード、6 ノード、7 ノード、8 ノード、および 9 ノードの ApsaraDB for PolarDB MySQL クラスターの読み取り専用パフォーマンスをテストします。
    sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 oltp_read_only prepare
    ## Prepare test data
    
    sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 --threads=XXX --percentile=95 —report-interval=1 oltp_read_only --db-ps-mode=disable --skip-trx=1 run
    ## Run workloads
    
    sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 --threads=XXX --percentile=95 oltp_read_only cleanup
    ## Clear temporary data

次のタスク