ApsaraDB RDS for MySQLインスタンスのmax_prepared_stmt_countパラメーターを変更して、ストレステストの要件とビジネス要件を満たすことができます。 このトピックでは、sysbenchベースのストレステストシナリオでRDSインスタンスのmax_prepared_stmt_countパラメーターを設定する方法について説明します。
背景情報
max_prepared_stmt_countパラメーターは、サーバー側で準備されたステートメントの総数を指定します。 max_prepared_stmt_countパラメーターは、サービス拒否 (DoS) 攻撃が発生するシナリオで使用されます。 攻撃者は、RDSインスタンスのメモリリソースを使い果たすために準備された多数のステートメントを挿入します。 詳細については、「max_prepared_stmt_count」をご参照ください。
RDSインスタンスのmax_prepared_stmt_countパラメーターのデフォルト値は16382です。 一部のシナリオでは、デフォルト値が小さすぎて要件を満たすことができません。 パラメーターの値を増やす必要があります。 たとえば、同時実行性の高いシナリオでのsysbenchベースのストレステストでは、max_prepared_stmt_countパラメーターの値が小さいことを示すエラーメッセージが表示される場合があります。
FATAL: MySQLエラー: 1461「max_prepared_stmt_countステートメントを作成できません (現在の値: 16382) 」
シナリオ
次のシナリオでは、max_prepared_stmt_countパラメーターを変更する必要があります。
sysbenchベースのストレステスト
max_prepared_stmt_countパラメーターに特別な要件が課されるシナリオ
使用上の注意
sysbenchベースのストレステストシナリオでは、テスト要件を満たすために、max_prepared_stmt_countパラメーターの値を一時的に増やす必要があります。 ストレステストが完了したら、メモリリスクとセキュリティリスクを防ぐために、パラメーターの値を減らすことをお勧めします。
パラメータの値を増減すると、次のリスクが発生する可能性があります。
準備されたステートメントは、少なくとも8 KBのメモリを占有します。 パラメーターの値を増やすと、RDSインスタンスの大量のメモリが準備されたステートメントによって占有されます。 これにより、RDSインスタンスは攻撃に対して脆弱になります。
パラメーターの値を減らしても、既存の準備済みステートメントは影響を受けません。 ただし、準備されたステートメントの数がmax_prepared_stmt_countパラメーターの値を超えると、前の準備されたステートメントがリリースされるまで、新しい準備されたステートメントは許可されません。
sysbenchベースのストレステストシナリオのパラメーター設定
この例では、sysbench 1.0.20が使用されます。 一般的なストレステストモデルの準備されたステートメントの数を計算するために使用される数式は、sysbenchソースコードの分析結果から取得できます。 ストレステストモデルを使用してsysbenchベースのストレステストを実行する前に、max_prepared_stmt_countパラメーターの値がモデルの準備済みステートメントの数以上であることを確認してください。 次の表に、さまざまなストレステストモデルの式を示します。
テストモデル | 準備されたステートメントの数 |
oltp_read_only | 次の式を使用して計算される値以上: スレッド数 × テーブル数 × 5 + スレッド数 |
oltp_write_only | 次の式を使用して計算される値以上: スレッド数 × テーブル数 × 4 + スレッド数 |
oltp_read_write | 以上: スレッド数 × テーブル数 × 9 + スレッド数 |
oltp_insert | 0 です。 準備されたステートメントは使用されません。 |
たとえば、oltp_read_onlyモデルのスレッド数が256、テーブル数が100の場合、準備されたステートメントの数は128,256です。 sysbenchベースのストレステストを実行する前に、max_prepared_stmt_countパラメーターの値を128256より大きい値に変更します。
パラメータ設定の手順
詳細は、「インスタンスパラメーターの変更」をご参照ください。