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

ApsaraDB RDS:max_prepared_stmt_countパラメーターの変更

最終更新日:Jan 18, 2024

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より大きい値に変更します。

パラメータ設定の手順

詳細は、「インスタンスパラメーターの変更」をご参照ください。