読み書きの分割を有効にした後、すべてのトランザクションはデフォルトでマスターインスタンスにルーティングされます。 例として、MySQL ストレステストツールである Sysbench 0.5 を例に挙げて、読み書き分割のパフォーマンスをテストするためにパラメーターを正しく設定する方法について説明します。

前提条件

  • 読み書き分割機能を有効になっています。 詳しい操作については、「読み書きの分離を有効にする」をご参照ください。
  • Sysbench 0.5 がインストールされています。 Sysbench 0.5 のダウンロードとインストール方法については、「Sysbench のドキュメント」をご参照ください。

注意

  • 読み書き分割のロードバランスパフォーマンスをテストするには、"prepare" または "transaction" のケースを使用しないことを推奨します。
  • 高い読み取りストレスによるマスター/スレーブの待ち時間がモニタリングチェック用に設定されたしきい値を超えないようにします。
  • 必要に応じて、次の Sysbench スクリプトを使用して特定の SQL 文を作成することを推奨します。
    function thread_init(thread_id)
          db_connect()
      end
    
      function event(thread_id)
          rs = db_query("select 1")
      end

Sysbench パラメータを設定する

デフォルトでは、トランザクションが "Sysbench oltp.lua" スクリプトのテストに使用されます。 デフォルトパラメータを使用すると、すべての SQL 文がトランザクション内で実行され、読み取り専用の SQL 文は実行のためにマスターデータベースにルーティングされます。 したがって、Sysbench を使用して読み書きの分割のパフォーマンスをテストするときは、必要に応じて Sysbench パラメータを設定する必要があります。 たとえば、 oltp-skip-trx パラメーターを設定して、 Sysbench がトランザクション内で SQL 文を実行しないようにすることができます。

共通パラメーターを設定する

必要に応じて以下のパラメーターを設定できます。

名前 説明
テスト テストファイルのパス
mysql-host MySQL サーバーの IP アドレス
mysql-port MySQL サーバーのポート
mysql-user ユーザー名
mysql-password パスワード
mysql-db テスト用データベース。事前に作成する必要があります。
oltp-tables-count 作成テーブル数
oltp-table-size 各テーブルに生成されたレコード数
rand-init データがランダムに初期化されるかどうか
最大時間 ストレステスト期間
最大リクエスト ストレステスト期間内のリクエストの総数
num-threads 同時スレッド数
報告間隔 操作ログの報告間隔

トランザクションのパラメータ設定および SQL 文の読み書き

次のパラメータはトランザクションに影響を与えます。SQL 文を読み書きします。 したがって、必要に応じて読み書き分割テストでパラメータを設定する必要があります。

名前 説明
oltp-test-mode テストモードを示します。 このパラメータは Sysbench 0.5 では使用できないため、このパラメータは省略できます。 可能な値:
  • complex: デフォルト値 トランザクションテスト用
  • simple: 読み取り専用 SQL 文の簡単なテスト
  • nontrx: 非トランザクションテスト用
  • sp: ストアドプロシージャ
oltp-skip-trx SQL 文の「begin」および「commit」を省略するかどうかを示します。 可能な値:
  • off: デフォルト値。 すべての SQL 文はトランザクション内で実行されます。
  • on: 非トランザクションモード 比較ストレステストを繰り返し実行する場合は、 preparecleanupを再度実行する必要があります。
読み書き分割のパフォーマンスをテストするためにストレステストを実行する場合は、onに設定する必要があります。 SQL 文の "begin" と "commit" を省略します。
oltp-read-only 読み取り専用の SQL 文を生成するかどうかを示します。 可能な値:
  • off: デフォルト値 oltp.lua の読み書きが混在する SQL 文が実行されます。
  • on: 読み取り専用 SQL 文のみが生成されます。 UPDATE、DELETE、INSERT SQL 文は適用されません。
読み取り専用テストまたは読み取り/書き込みテストを実行するために必要に応じてパラメータ値を設定します。

ストレステストの例

読み取り/書き込みパフォーマンスをテストする
  1. 次のコマンドを実行してデータを準備します。
    sysbench --test=./tests/db/oltp.lua --mysql-host=127.0.0.1 --mysql-port=3001 --mysql-user=abc --mysql-password=abc123456 --mysql-db=testdb --oltp-tables-count=10 --oltp-table-size=500000 --report-interval=5 --oltp-skip-trx=on --oltp-read-only=off --rand-init=on --max-requests=0 --max-time=300 --num-threads=100 prepare;
  2. 次のコマンドを実行して、プロジェクトをコンパイルします。
    非トランザクションの読み取り/書き込みテスト用にデータが更新されると、 「警告: エラー 1062 キー 'PRIMARY' のエントリ 'xxx' が重複しています」が発生する可能性があります。 --mysql-ignore-errors=1062を追加してこのエラーをスキップします。 パラメータ mysql-ignore-errors の効果がない場合は、現在使用中の Sysbench バージョンが古すぎるので、最新バージョンへアップグレードする必要があります。
    sysbench --test=./tests/db/oltp.lua --mysql-host=127.0.0.1 --mysql-port=3001 --mysql-user=abc --mysql-password=abc123456 --mysql-db=testdb --oltp-tables-count=10 --oltp-table-size=500000 --report-interval=5 --oltp-skip-trx=on --oltp-read-only=off --mysql-ignore-errors=1062 --rand-init=on --max-requests=0 --max-time=300 --num-threads=100 run;
  3. 次のコマンドを実行してデータをクリーンアップします。
    sysbench --test=./tests/db/oltp.lua --mysql-host=127.0.0.1 --mysql-port=3001 --mysql-user=abc --mysql-password=abc123456 --mysql-db=testdb --oltp-tables-count=10 --oltp-table-size=500000 --report-interval=5 --oltp-skip-trx=on --oltp-read-only=off --rand-init=on --max-requests=0 --max-time=300 --num-threads=100 cleanup;
読み取り専用のパフォーマンスをテストする
  1. 次のコマンドを実行してデータを準備します。
    sysbench --test=./tests/db/oltp.lua --mysql-host=127.0.0.1--mysql-port=3001--mysql-user=abc --mysql-password=abc123456 --mysql-db=testdb --oltp-tables-count=10--oltp-table-size=500000--report-interval=5--oltp-skip-trx=on --oltp-read-only=on --rand-init=on --max-requests=0--max-time=300--num-threads=100 prepare;
  2. 次のコマンドを実行して、プロジェクトをコンパイルします。
    sysbench --test=./tests/db/oltp.lua --mysql-host=127.0.0.1 --mysql-port=3001 --mysql-user=abc --mysql-password=abc123456 --mysql-db=testdb --oltp-tables-count=10 --oltp-table-size=500000 --report-interval=5 --oltp-skip-trx=on --oltp-read-only=on --rand-init=on --max-requests=0 --max-time=300 --num-threads=100 run;
  3. 次のコマンドを実行してデータをクリーンアップします。
    sysbench --test=./tests/db/oltp.lua --mysql-host=127.0.0.1 --mysql-port=3001 --mysql-user=abc --mysql-password=abc123456 --mysql-db=testdb --oltp-tables-count=10 --oltp-table-size=500000 --report-interval=5 --oltp-skip-trx=on --oltp-read-only=on --rand-init=on --max-requests=0 --max-time=300 --num-threads=100 cleanup;