ここでは、MySQL ストレステストツールである Sysbench 0.5 を例に使用し、RDS MySQL インスタンスの読み書き分離パフォーマンスを検証するパラメーターを適切に設定する方法を説明します。 読み書きの分割を有効にした後、すべてのトランザクションはデフォルトでマスターインスタンスにルーティングされます。
前提条件
- 読み書き分割機能を有効になっています。 詳しい操作については、「ApsaraDB RDS for MySQLインスタンスの読み書き分離機能を有効にする (共有プロキシ)」をご参照ください。
- 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 文を実行しないようにすることができます。
共通パラメーターを設定する
必要に応じて以下のパラメーターを設定できます。
名称 | 説明 |
test | テストファイルのパス |
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 では使用できないため、このパラメータは省略できます。 可能な値:
|
oltp-skip-trx | SQL 文の「begin」および「commit」を省略するかどうかを示します。 可能な値:
説明 読み書き分割のパフォーマンスをテストするためにストレステストを実行する場合は、onに設定する必要があります。 SQL 文の "begin" と "commit" を省略します。 |
oltp-read-only | 読み取り専用の SQL 文を生成するかどうかを示します。 可能な値:
説明 読み取り専用テストまたは読み取り/書き込みテストを実行するために必要に応じてパラメータ値を設定します。 |
ストレステストの例
読み取り/書き込みパフォーマンスをテストする- 次のコマンドを実行してデータを準備します。
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;
- 次のコマンドを実行して、プロジェクトをコンパイルします。
説明 非トランザクションの読み取り/書き込みテスト用にデータが更新されると、
「警告: エラー 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;
- 次のコマンドを実行してデータをクリーンアップします。
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;
- 次のコマンドを実行してデータを準備します。
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;
- 次のコマンドを実行して、プロジェクトをコンパイルします。
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;
- 次のコマンドを実行してデータをクリーンアップします。
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;