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

Database Autonomy Service:SQL スロットリング

最終更新日:Mar 28, 2026

SQL スロットリングでは、データベースに対して同時に実行される SQL ステートメントの数を上限で制限できます。これにより、特定のクエリタイプの急増によって他のリクエストがリソース不足に陥ったり、データベース全体がダウンしたりするのを防ぎます。

仕組み

スロットリングルールを作成すると、Database Autonomy Service (DAS) がすべての着信 SQL ステートメントを監視し、各ステートメントをルールのマッチング条件(キーワードまたは SQL テンプレート)と照合します。マッチするステートメントが同時に実行中の数が設定された最大同時実行数に達すると、追加のマッチステートメントは、インスタンスのバージョンおよび構成に応じて、キュー内で待機するか、即座に拒否されます。

リクエストフロー:

  1. SQL ステートメントがデータベースに到着します。

  2. DAS が、そのステートメントがスロットリングルール(キーワード、テンプレート、テンプレート ID、実行時間)に一致するかどうかを確認します。

  3. ステートメントが一致し、かつ同時実行数の上限に達していない場合は、通常通り実行されます。

  4. 同時実行数の上限に達した場合:

    • 最大同時実行数 = 正の整数: ステートメントは待機キューに入ります。キュー長が ccl_max_waiting_count を超過すると、データベースからエラーが返されます。

    • 最大同時実行数 = 0: ステートメントは即座に拒否され、データベースからエラーが返されます。

適用範囲

シナリオ
特定のクエリタイプにおける同時実行数の急増キャッシュペネトレーションやアプリケーションの異常な呼び出しにより、SQL 同時実行数が急増する
データスキューを引き起こすクエリ販売プロモーション中にホットデータを頻繁にクエリすると、システム全体が過負荷状態になる
欠落しているインデックスによる全テーブルスキャンインデックスのないテーブルに対する大量の SQL 呼び出しにより、システム全体の応答が遅くなる

サポート対象のデータベース

データベースエンジンサポート対象バージョン
ApsaraDB RDS for MySQL5.6、5.7、8.0
ApsaraDB RDS for PostgreSQL13(マイナーエンジンバージョン 20250430 以降)、14(マイナーバージョン 20230330 以降)、15(マイナーバージョン 20230330 以降)、15 より後のバージョン(マイナーバージョン要件なし)
PolarDB for MySQL5.6、5.7、8.0
PolarDB-X 2.0

スロットリングモード

スロットル対象の SQL ステートメントを識別する方法に応じて、適切なモードを選択してください。

モード説明適用可能なデータベース
キーワードによるスロットリング指定されたすべてのキーワードを含む SQL ステートメントをスロットルします。注:このモードでは単一の特定ステートメントをターゲットにすることはできません。指定されたすべてのキーワードを含むステートメントがマッチします。ApsaraDB RDS for MySQL、PolarDB for MySQL、PolarDB-X 2.0
SQL テンプレートによるスロットリング代表的な SQL ステートメントを入力します。DAS がこれをテンプレートに変換し、該当テンプレートに一致するすべてのステートメントをスロットルします。ApsaraDB RDS for MySQL 8.0(マイナーエンジンバージョン 20230630 以降);ApsaraDB RDS for PostgreSQL 13(マイナーバージョン 20250430 以降)、14/15(マイナーバージョン 20230330 以降)、および 15 より後のバージョン;PolarDB for MySQL 8.0.1(マイナーバージョン 8.0.1.1.31 以降)および 8.0.2(マイナーバージョン 8.0.2.2.12 以降)
SQL テンプレート ID によるスロットリングSQL テンプレート ID を直接入力します。テンプレート ID は、SQL ログ、セッション、または EXPLAIN 結果から取得できます。テンプレート ID は 8 文字の 16 進数文字列です。PolarDB-X 2.0 Enterprise Edition
実行時間によるスロットリング実行時間のしきい値を設定します。DAS は、このしきい値を超えるステートメントのテンプレート ID を自動的にスロットリングルールに追加し、設定された同時実行数制限を適用します。PolarDB-X 2.0 Enterprise Edition

スロットリングルールの作成

重要

SQL スロットリングは緊急措置です。スロットリング期間は短めに設定し、状況が解消次第、速やかにルールを無効化してください。

  1. DAS コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、インテリジェント O&M センター > インスタンス監視 をクリックします。

  3. 対象のターゲットインスタンスを見つけ、インスタンス ID をクリックしてインスタンス詳細ページに移動します。

  4. 左側のナビゲーションウィンドウで、インスタンスセッション をクリックします。

  5. セッション管理 ページで、SQL スロットリング をクリックします。

  6. 表示されるダイアログボックスで、スロットリングルールの作成 をクリックします。

  7. スロットリングルールの作成 ダイアログボックスで、ご利用のデータベースエンジンに応じたパラメーターを構成します。

ApsaraDB RDS for MySQL

パラメーター説明
スロットリングモードスロットリングモードを選択します。
SQL タイプスロットル対象の SQL ステートメントの種類を選択します:SELECTUPDATEDELETE、または INSERT。スロットリングモードが キーワードによるスロットリング の場合に必須です。
説明

INSERT ステートメントは、ApsaraDB RDS for MySQL 8.0、PolarDB for MySQL 5.7 および 8.0、および PolarDB-X 2.0 のみでスロットル可能です。INSERT...SELECT... ステートメントはスロットルできません。

データベーススロットリングモードスロットリングルールを適用するデータベースです。スロットリングモードが SQL テンプレートによるスロットリング の場合に必須です。
最大同時実行数同時に実行できる SQL ステートメントの最大数です。最小値:0。マッチするステートメントの同時実行数がこの数に達すると、スロットリングがトリガーされます。
スロットリング期間スロットリングルールが有効な期間です。期間満了前に状況が解消した場合は、手動でルールを無効化してください。
SQL キーワードスロットリングモードが キーワードによるスロットリング の場合に必須です。スロットル対象のステートメントを識別するキーワードを入力します。複数のキーワードはチルダ (~) で区切ります。ステートメントは、指定されたすべてのキーワードを含む場合のみスロットルされます(順序は問いません)。
説明

ほとんどのバージョンではキーワードの大文字小文字が区別されます。SELECTINSERTUPDATEDELETE のみをキーワードとして使用することはできません。例: ステートメント SELECT min(id), max(id) FROM task_event WHERE gmt_modified < '2020-06-21' AND begin_time > '2020-07-09' AND source IN (527) AND id >= 15673 AND id <= 8015673 の対応するキーワードは、SELECT~min~id~max~id~FROM~task_event~WHERE~gmt_modified~AND~begin_time~AND~source~IN~AND~id~AND~id です。

SQL サンプルスロットルモードスロットリングモードが SQL テンプレートによるスロットリング の場合に必須です。代表的な SQL ステートメントを入力します。DAS は、リテラル値をプレースホルダーに置き換えることで、これをテンプレートに変換します。たとえば、select name from das where name = \das\ and age = 21 limit 20 は、テンプレート select name from das where name = ? and age = ? limit ? になります。サンプルの正規化方法は、スロットリング効果に影響しません。

ApsaraDB RDS for PostgreSQL

ApsaraDB RDS for PostgreSQL では、SQL テンプレートによるスロットリング モードのみがサポートされています。

パラメーター説明
データベーススロットリングルールを適用するデータベースです。
検索パススロットリングルールのスキーマ検索パスです。複数のパスはカンマ (,) で区切ります。デフォルト: information_schema,public
最大同時実行数同時に実行できる SQL ステートメントの最大数です。最小値:0。マッチするステートメントの同時実行数がこの数に達すると、スロットリングがトリガーされます。
最大待機クエリ数キュー内で待機することを許可されるステートメントの最大数です。
スロットリング期間スロットリングルールが有効な期間です。期間満了前に状況が解消した場合は、手動でルールを無効化してください。
SQL サンプル代表的な SQL ステートメントを入力します。DAS は、リテラル値をプレースホルダーに置き換えることで、これをテンプレートに変換します。たとえば、select name from das where name = "das" and age = 21 limit 20select name from das where name = ? and age = ? limit ? になります。

PolarDB for MySQL

パラメーター説明
スロットリングモードスロットリングモードを選択します。
SQL タイプ速度制限を適用する SQL ステートメントのタイプを選択します:SELECTUPDATEDELETE、または INSERT
説明

INSERT 文は、ApsaraDB RDS for MySQL 8.0、PolarDB for MySQL 5.7 および 8.0、および PolarDB-X 2.0 のみで速度制限が可能です。INSERT...SELECT... 文は速度制限できません。

最大同時実行数同時に実行可能な SQL ステートメントの最大数です。最小値:0。
データベース速度制限ルールを適用するデータベースです。スロットリングモードSQL テンプレートによる速度制限 に設定されている場合に必須です。
速度制限持続時間速度制限ルールがアクティブな状態で維持される時間です。
SQL キーワードスロットリングモードキーワードによる速度制限 に設定されている場合に必須です。ApsaraDB RDS for MySQL と同様のルールが適用されます。複数のキーワードを指定する場合は、~ で区切ります。速度制限の対象となるステートメントには、指定されたすべてのキーワードが含まれている必要があります。
SQL サンプルスロットリングモードSQL テンプレートによる速度制限 に設定されている場合に必須です。DAS は、このサンプルからリテラル値をプレースホルダーに置き換えてテンプレートを生成します。

PolarDB-X 2.0

パラメーター説明
スロットリングモードスロットリングモードを選択します。
SQL タイプスロットル対象の SQL ステートメントの種類を選択します:SELECTUPDATEDELETE、または INSERT
説明

INSERT ステートメントは、ApsaraDB RDS for MySQL 8.0、PolarDB for MySQL 5.7 および 8.0、および PolarDB-X 2.0 のみでスロットル可能です。INSERT...SELECT... ステートメントはスロットルできません。

最大同時実行数同時に実行できる SQL ステートメントの最大数です。最小値:0。
スロットリング期間スロットリングルールが有効な期間です。
SQL キーワード[スロットルモード][キーワードによるスロットル] に設定されている場合に必須です。複数のキーワードは ~ で区切ります。スロットル対象となるには、文に指定されたすべてのキーワードが含まれている必要があります。
SQL テンプレート IDスロットリングモードPolarDB-X 2.0 Enterprise Edition で、スロットリングモードが SQL テンプレートによるスロットリング の場合に必須です。8 文字の 16 進数テンプレート ID を 1 つ以上、カンマ (,) で区切って入力します。テンプレート ID は、SQL ログ、セッション、または EXPLAIN 結果から取得できます。
最小 SQL 実行時間PolarDB-X 2.0 Enterprise Edition で [速度制限モード][実行時間による速度制限] に設定されている場合に必要です。実行時間のしきい値です。文がこのしきい値を超えると、DAS は自動的にそのテンプレート ID を速度制限ルールに追加します。
最大スロットル対象 SQL ID 数PolarDB-X 2.0 Enterprise Edition で [スロットルモード][実行時間によるスロットル] に設定されている場合に必要です。スロットル可能な SQL テンプレート ID の最大数です。この制限に達すると、しきい値を超える文がさらに存在しても、DAS は新しいテンプレート ID の追加を停止します。
スロットル対象クエリのデータベースアカウント[速度制限モード]」が「[キーワードによる速度制限]」または「[SQL テンプレートによる速度制限]」に設定されている場合に必須です。速度制限の対象となる SQL ステートメントを持つデータベースアカウントです。
  1. 送信 をクリックしてルールを作成します。

スロットリング動作およびエラーコード

スロットリングルールがトリガーされると、データベースはアプリケーションにエラーを返します。具体的なエラーコードは、インスタンスのバージョンおよび設定された最大同時実行数によって異なります。

最大同時実行数インスタンスエラーコードエラーメッセージ
0 または正の整数ApsaraDB RDS for MySQL 5.61317query execution was interrupted
0 または正の整数ApsaraDB RDS for MySQL 5.7(マイナーバージョンが 20200630 より前の場合)1317query execution was interrupted
0 または正の整数PolarDB for MySQL 5.61317query execution was interrupted
正の整数ApsaraDB RDS for MySQL 5.7(マイナーバージョンが 20200630 以降の場合)5041Concurrency control waiting count exceed max waiting count
正の整数ApsaraDB RDS for MySQL 8.07534Concurrency control waiting count exceed max waiting count
正の整数PolarDB for MySQL 5.73277Concurrency control waiting count exceed max waiting count
正の整数PolarDB for MySQL 8.07533Concurrency control waiting count exceed max waiting count
0ApsaraDB RDS for MySQL 5.7(マイナーバージョンが 20200630 以降の場合)5042Concurrency control refuse to execute query
0ApsaraDB RDS for MySQL 8.07535Concurrency control refuse to execute query
0PolarDB for MySQL 5.73278Concurrency control refuse to execute query
0PolarDB for MySQL 8.07534Concurrency control refuse to execute query

サポート対象インスタンスの追加パラメーター:

  • `ccl_max_waiting_count`(ApsaraDB RDS for MySQL 5.7 マイナーバージョン 20200630 以降、ApsaraDB RDS for MySQL 8.0):キューの最大長を設定します。0 に設定した場合、DAS はデフォルト値 10 を使用します。

  • `ccl_wait_timeout`(ApsaraDB RDS for MySQL 5.7 マイナーバージョン 20200630 以降、ApsaraDB RDS for MySQL 8.0):待機中のステートメントのタイムアウトを設定します(インスタンスバージョンが対応している場合)。タイムアウトを超えたステートメントは継続して実行され、スロットリングの対象外となります。

  • `ccl_mode`(PolarDB for MySQL 8.0):同時実行数制限を超えた際の動作を制御します。このパラメーターは、対応するインスタンスバージョンでのみ利用可能です。

    • WAIT(デフォルト):ステートメントはキュー内で待機します。

    • REFUSE:ステートメントは待機せず、即座に拒否されます。

スロットリングルールの表示および管理

ルールを作成すると、そのルールは 実行中 タブに以下の詳細とともに表示されます。

表示されるカラムは、データベースエンジンおよびスロットリングモードによって異なります。
カラム説明
スロットリングモードルール作成時に選択したモードです。
スロットリングルールルールの構成内容:キーワード(キーワードモード)、テンプレート ID(テンプレートモード)、または実行時間しきい値およびスロットル対象ステートメント数(実行時間モード)です。
最大同時実行数設定された同時実行数制限です。
最大待機クエリ数キューの最大長です。ApsaraDB RDS for PostgreSQL(SQL テンプレートモード)で表示されます。
スロットリング期間(分)設定された有効期間です。
開始時刻ルールが有効になった時刻です。
残り時間(秒)ルールの有効期限までに残っている時間です。
サンプル SQLテンプレート生成に使用された SQL サンプルです。SQL テンプレートモードで表示されます。
スロットリングテンプレート IDスロットル対象の SQL サンプルに対応するテンプレート ID です。SQL テンプレートモードで表示されます。
ステータス実行中のルールは 有効 と表示されます。
データベースルールが適用されるデータベースです。SQL テンプレートモードで表示されます。
検索パススキーマ検索パスです。ApsaraDB RDS for PostgreSQL(SQL テンプレートモード)で表示されます。
一致した SQL クエリこのルールでマッチした SQL ステートメントの数です。SQL テンプレートモードで表示されます。
待機中の SQL クエリ現在キュー内で待機中の SQL ステートメントの数です。SQL テンプレートモードで表示されます。
操作無効化 または 編集 を実行します。

次のステップ

API リファレンス

API説明
EnableSqlConcurrencyControlSQL スロットリングを有効化します。
DisableSqlConcurrencyControl指定されたスロットリングルールを無効化します。
DisableAllSqlConcurrencyControlRulesすべての実行中のスロットリングルールを無効化します。
GetRunningSqlConcurrencyControlRules実行中のスロットリングルールを取得します。
GetSqlConcurrencyControlRulesHistory実行中またはトリガー済みのスロットリングルールを取得します。
GetSqlConcurrencyControlKeywordsFromSqlTextSQL ステートメントからスロットリングキーワードを生成します。