Database Autonomy Service (DAS) は、サービスの可用性を確保するために、データベースへのアクセスリクエスト量と SQL の同時実行数をコントロールする SQL スロットリング機能を提供します。
前提条件
サポート対象のデータベースエンジンは次のとおりです。
-
ApsaraDB RDS for MySQL 5.6、5.7、8.0。
-
ApsaraDB RDS for PostgreSQL 13 以降。
説明-
PostgreSQL 13 の場合、マイナーエンジンバージョン は 20250430 以降である必要があります。
-
PostgreSQL 14 または 15 の場合、マイナーエンジンバージョンは 20230330 以降である必要があります。
-
PostgreSQL 15 よりも後のバージョンでは、すべてのマイナーエンジンバージョンがサポートされます。
-
-
PolarDB for MySQL 5.6、5.7、8.0。
-
PolarDB-X 2.0。
-
MongoDB。
スロットリングのエラーメッセージ
SQL スロットリングルールを作成した後、アプリケーションがそのルールのキーワードまたはテンプレートに一致する SQL ステートメントを実行すると、データベースシステムから特定のエラーメッセージが返されます。
|
最大同時実行数 |
インスタンスバージョン |
エラーコード |
エラーメッセージ |
|
0 または正の整数 |
|
1317 |
|
|
MongoDB |
56900 |
|
|
|
正の整数 |
ApsaraDB RDS for MySQL 5.7 (マイナーエンジンバージョン 20200630 以降) |
5041 |
説明
最大同時実行数は正の整数であり、関連する SQL クエリは、待機数が |
|
ApsaraDB RDS for MySQL 8.0 |
7534 |
||
|
PolarDB for MySQL 5.7 |
3277 |
||
|
PolarDB for MySQL 8.0 |
7532 |
||
|
0 |
ApsaraDB RDS for MySQL 5.7 (マイナーエンジンバージョン 20200630 以降) |
5042 |
説明
最大同時実行数が 0 の場合、エラーがすぐに返されます。 |
|
ApsaraDB RDS for MySQL 8.0 |
7535 |
||
|
PolarDB for MySQL 5.7 |
3278 |
||
|
PolarDB for MySQL 8.0 |
7533 |
-
DAS が SQL スロットリングを実行する際、
ccl_max_waiting_countパラメーターが 0 に設定されている場合、DAS はデフォルト値の 10 を使用します。パラメーターが 0 より大きい値に設定されている場合は、指定された値を使用します。 -
ApsaraDB RDS for MySQL 5.7 (マイナーバージョン 20200630 以降) および ApsaraDB RDS for MySQL 8.0 インスタンスでは、
ccl_wait_timeoutパラメーターが設定されており (かつインスタンスのバージョンでサポートされている) 場合、Concurrency control waiting状態の SQL ステートメントは、この制限時間を超えると実行が継続され、スロットリングされなくなります。 -
PolarDB for MySQL 8.0 インスタンスでは、
ccl_modeパラメーターを設定して、同時実行数の上限を超えた場合の SQL ステートメントの動作を制御できます。このパラメーターは、サポートされているインスタンスバージョンでのみ使用できます。-
WAIT (デフォルト): ステートメントはキューで待機します。
-
REFUSE: ステートメントは待機せず、すぐにエラーが返されます。
-
シナリオ
|
シナリオ |
説明 |
|
SQL の同時実行数の急増 |
キャッシュペネトレーションや異常な呼び出しにより、SQL の同時実行数が急増することがあります。 |
|
データスキューを伴う SQL クエリ |
セールスプロモーション期間中にホットデータを頻繁にクエリすると、システムに過負荷がかかることがあります。 |
|
インデックスの欠落 |
インデックスが作成されていないテーブルに対して大量の SQL 呼び出しが発生すると、システムに過負荷がかかることがあります。 |
スロットリングモード
|
モード |
説明 |
対応データベース |
|
[キーワードスロットリング] |
指定されたキーワードを含む SQL ステートメントをスロットリングします。 説明
このモードでは、特定の SQL ステートメントをスロットリングすることはできません。 |
|
|
[SQLテンプレートの調整] |
SQL サンプルを入力します。システムはそれを SQL テンプレートに処理し、一致するすべての SQL ステートメントをスロットリングします。 |
|
|
SQL テンプレート ID を照合して SQL ステートメントをスロットリングします。SQL テンプレート ID は、SQL ログ、セッション、および EXPLAIN 実行結果から取得できます。 説明
SQL テンプレート ID は、8 文字の 16 進数文字列です。 |
PolarDB-X 2.0 Enterprise Edition |
|
|
[時間のかかる電流制限を実行する] |
SQL ステートメントの実行時間が指定されたしきい値を超えると、その SQL テンプレート ID が自動的にスロットリングルールに追加されます。その後、この ID に一致するステートメントは、ルールで指定された同時実行数に基づいて実行されます。 説明
スロットリングされる SQL テンプレート ID の数に制限を設定することもできます。制限に達すると、他の SQL ステートメントに対してはそれ以上スロットリングルールは作成されません。 |
PolarDB-X 2.0 Enterprise Edition |
|
[操作タイプのリミット設定] |
指定されたコレクションに対する find、insert、update、delete 操作の同時実行数を制御します。 |
MongoDB
|
手順
このトピックでは、ApsaraDB RDS for MySQL を例に、スロットリング機能の使用方法を説明します。他のデータベースタイプでの関連操作については、「関連ドキュメント」をご参照ください。
にログインします。DASコンソール.
左側のナビゲーションウィンドウで、インスタンスモニター.
表示されるページで、管理するデータベースインスタンスを見つけ、インスタンスIDをクリックします。 インスタンス詳細ページが表示されます。
-
ナビゲーションペインで、インスタンスセッション をクリックします。
-
セッション管理 ページで、SQL スロットリング をクリックします。
-
ダイアログボックスで、スロットルルールの作成 をクリックします。
-
スロットルルールの作成 ダイアログボックスで、データベースエンジンに基づいて次のパラメーターを設定します。
-
[Throttling Mode] を [キーワードによるスロットリング] に設定した場合、このパラメーターは必須です。
-
次のデータベースエンジンでは、INSERT ステートメントをスロットリングできます。
-
ApsaraDB RDS for MySQL 8.0
-
PolarDB for MySQL 5.7 および 8.0
-
PolarDB-X 2.0
-
-
INSERT...SELECT...ステートメントをスロットリングすることはできません。 -
スロットリングモード を キーワードによるスロットリング に設定した場合、このパラメーターは必須です。
-
複数のキーワードを指定した場合、SQL ステートメントに指定したキーワードが すべて 含まれている場合にのみ、スロットリングルールがトリガーされます。複数のキーワードはチルダ (~) で区切ります。キーワードの順序は問いません。
例:元のステートメントが
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です。 -
スロットリングキーワードとして
SELECT, INSERT, UPDATE, DELETEのみを指定することはできません。キーワードでは大文字と小文字が区別されます。ただし、一部の古いバージョンのインスタンスでは、大文字と小文字は区別されません。 -
スロットリングモード を SQL テンプレートによるスロットリング に設定した場合、このパラメーターは必須です。
-
複雑な SQL ステートメントの場合、DAS は内部処理のために SQL サンプルを変換しますが、最終的な SQL テンプレートは変わりません。この変換はスロットリングの効果に影響しません。
例:
select name from das where name = `das` and age = 21 limit 20を入力すると、select name from das where name = ? and age = ? limit ?にテンプレート化され、その後
select name from das where name = `param0` and age = `param1` limit 20に書き換えられます。 -
[Throttling Mode] を [SQLテンプレートの調整] に設定した場合、このパラメーターは必須です。
-
複雑な SQL ステートメントの場合、DAS は内部処理のために SQL サンプルを変換しますが、最終的な SQL テンプレートは変わりません。この変換はスロットリングの効果に影響しません。
例:
select name from das where name = "das" and age = 21 limit 20を入力すると、select name from das where name = ? and age = ? limit ?にテンプレート化され、その後
select name from das where name = "param0" and age = "param1" limit 20に書き換えられます。 -
INSERTステートメントは、以下のデータベースエンジンでのみスロットリングできます:-
ApsaraDB RDS for MySQL 8.0
-
PolarDB for MySQL 5.7 および 8.0
-
PolarDB-X 2.0
-
-
INSERT...SELECT...ステートメントをスロットリングすることはできません。 -
[Throttling Mode] を [キーワードによるスロットリング] に設定した場合、このパラメーターは必須です。
-
複数のキーワードを指定した場合、SQL ステートメントに指定したキーワードが すべて 含まれている場合にのみ、スロットリングルールがトリガーされます。複数のキーワードはチルダ (~) で区切ります。キーワードの順序は問いません。
例:元のステートメントが
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です。 -
スロットリングキーワードとして、
SELECT、INSERT、UPDATE、またはDELETEのいずれか 1 つのみを指定することはできません。キーワードは大文字と小文字を区別します。ただし、一部の古いインスタンスバージョンでは大文字と小文字が区別されません。 -
[Throttling Mode] を [SQLテンプレートの調整] に設定した場合、このパラメーターは必須です。
-
複雑な SQL ステートメントの場合、DAS は内部処理のために SQL サンプルを変換しますが、最終的な SQL テンプレートは変わりません。この変換はスロットリングの効果に影響しません。
例:
select name from das where name = "das" and age = 21 limit 20を入力すると、select name from das where name = ? and age = ? limit ?にテンプレート化され、その後
select name from das where name = "param0" and age = "param1" limit 20に書き換えられます。 -
INSERTステートメントは、以下のデータベースエンジンでのみスロットリングできます:-
ApsaraDB RDS for MySQL 8.0
-
PolarDB for MySQL 5.7 および 8.0
-
PolarDB-X 2.0
-
-
INSERT...SELECT...ステートメントをスロットルすることはできません。 -
[Throttling Mode] を [キーワードによるスロットリング] に設定した場合、このパラメーターは必須です。
-
複数のキーワードを指定した場合、SQL ステートメントに指定したキーワードが すべて 含まれている場合にのみ、スロットリングルールがトリガーされます。複数のキーワードはチルダ (~) で区切ります。キーワードの順序は問いません。
例:元のステートメントが
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です。 -
スロットリングキーワードとして、
SELECT、INSERT、UPDATE、またはDELETEのいずれか 1 つのみを指定することはできません。キーワードは大文字と小文字を区別します。ただし、一部の古いインスタンスバージョンでは大文字と小文字が区別されません。 -
提出 をクリックします。
SQL スロットリングルールを作成した後、操作中 タブで詳細を確認できます。次の表で、各パラメーターについて説明します。
説明一覧に表示されるパラメーターは、データベースエンジンとスロットリングモードによって一部異なります。
パラメーター
説明
[Throttling Mode]
選択したモード。
[現在の制限ルール]
-
[キーワード制限]:設定したスロットリングキーワード。
-
[SQLテンプレートの調整]:SQL サンプルに対応するテンプレート ID。
-
[時間のかかる電流制限を実行する]:設定した実行時間のしきい値と、スロットリング対象の SQL テンプレート数。
[最大同時実行性]
同時に実行される SQL ステートメントの最大数。
[最大待機数]
スロットリングルールで設定した待機クエリの最大数。
説明[Throttling Mode]を[SQLテンプレートの調整]に設定した場合、このパラメーターは ApsaraDB RDS for PostgreSQL インスタンスに表示されます。
[现在の制限时间 (分)]
SQL スロットリングルールが有効である期間。
[開始時間]
スロットリングルールが設定され、有効になった時刻。
[残り時間]
スロットリングルールの有効期限が切れるまでの残り時間。
[SQL サンプル]
スロットリングされる SQL ステートメントの例。
説明[Throttling Mode]を[SQLテンプレートの調整]に設定した場合、このパラメーターが表示されます。
[フロー制限テンプレートID]
SQL サンプルに対応するテンプレート ID。
説明[Throttling Mode]を[SQLテンプレートの調整]に設定した場合、このパラメーターが表示されます。
[ステータス]
ルールが有効な状態。
[データベース]
SQL ステートメントがスロットリングされるデータベース。
説明[Throttling Mode]を[SQLテンプレートの調整]に設定した場合、このパラメーターが表示されます。
[検索パス]
スロットリングされる SQL ステートメントに対応する検索パス。
説明[Throttling Mode]を[SQLテンプレートの調整]に設定した場合、このパラメーターは ApsaraDB RDS for PostgreSQL インスタンスに表示されます。
[一致するSQL量]
スロットリングルールに一致した SQL クエリの数。
説明[Throttling Mode]を[SQLテンプレートの調整]に設定した場合、このパラメーターが表示されます。
[SQL待機中の数]
スロットリングルールにより待機中となっている SQL クエリの数。
説明[Throttling Mode]を[SQLテンプレートの調整]に設定した場合、このパラメーターが表示されます。
[操作]
ルールを閉じる または 変更 できます。
-
RDS for MySQL
|
パラメーター |
説明 |
|
[Throttling Mode] |
必要に応じて スロットリングモード を選択します。 |
|
[SQL Type] |
SQL ステートメントのタイプ。有効な値: [SELECT]、[UPDATE]、[DELETE]、および [INSERT]。 説明
|
|
[データベース] |
SQL ステートメントのスロットリング対象となるデータベース。 説明
[Throttling Mode] を [SQLテンプレートの調整] に設定した場合、このパラメーターは必須です。 |
|
[最大同時実行性] |
同時 SQL ステートメントの最大数。最小値は 0 です。 説明
ルールに一致する SQL ステートメントの同時実行数がこの値に達すると、スロットリングが開始されます。 |
|
[スロットリングの期間] |
SQL スロットリングルールが有効な期間です。 重要
SQL スロットリングは緊急措置です。ビジネス要件に基づいて期間を設定し、不要になったらルールを無効にすることを推奨します。 |
|
[SQL キーワード] |
スロットリングする SQL ステートメントに含まれるキーワード。 説明
|
|
[SQL サンプル] |
スロットリングする SQL ステートメントの例。 説明
|
RDS for PostgreSQL
|
パラメーター |
説明 |
|
[Throttling Mode] |
ApsaraDB RDS for PostgreSQL では、SQL テンプレートによるスロットリング のみがサポートされています。 |
|
[データベース] |
SQL ステートメントのスロットリング対象となるデータベース。 |
|
[検索パス] |
SQL スロットリングの検索パス。 説明
複数のパスは、コンマ ( |
|
[最大同時実行性] |
同時 SQL ステートメントの最大数。最小値は 0 です。 説明
ルールに一致する SQL ステートメントの同時実行数がこの値に達すると、スロットリングが開始されます。 |
|
[最大待機数] |
待機クエリの最大数。 |
|
[スロットリングの期間] |
SQL スロットリングルールが有効な期間です。 重要
SQL スロットリングは緊急措置です。ビジネス要件に基づいて期間を設定し、不要になったらルールを無効にすることを推奨します。 |
|
[SQL サンプル] |
スロットリングする SQL ステートメントの例。 説明
|
PolarDB for MySQL
|
パラメーター |
説明 |
|
[Throttling Mode] |
必要に応じて スロットリングモード を選択します。 |
|
[SQL Type] |
SQL ステートメントの種類。有効な値は 説明
|
|
[最大同時実行性] |
同時 SQL ステートメントの最大数。最小値は 0 です。 説明
ルールに一致する SQL ステートメントの同時実行数がこの値に達すると、スロットリングが開始されます。 |
|
[データベース] |
SQL ステートメントのスロットリング対象となるデータベース。 説明
[Throttling Mode] を [SQLテンプレートの調整] に設定した場合、このパラメーターは必須です。 |
|
[スロットリングの期間] |
SQL スロットリングルールが有効な期間です。 重要
SQL スロットリングは緊急措置です。ビジネス要件に基づいて期間を設定し、不要になったらルールを無効にすることを推奨します。 |
|
[SQL キーワード] |
スロットリングする SQL ステートメントに含まれるキーワード。 説明
|
|
[SQL サンプル] |
スロットリングする SQL ステートメントの例。 説明
|
PolarDB-X 2.0
|
パラメーター |
説明 |
|
[Throttling Mode] |
必要に応じて スロットリングモード を選択します。 |
|
[SQL Type] |
SQL ステートメントのタイプ。有効な値: 説明
|
|
[最大同時実行性] |
同時 SQL ステートメントの最大数。最小値は 0 です。 説明
ルールに一致する SQL ステートメントの同時実行数がこの値に達すると、スロットリングが開始されます。 |
|
[スロットリングの期間] |
SQL スロットリングルールが有効な期間です。 重要
SQL スロットリングは緊急措置です。ビジネス要件に基づいて期間を設定し、不要になったらルールを無効にすることを推奨します。 |
|
[SQL キーワード] |
スロットリングする SQL ステートメントに含まれるキーワード。 説明
|
|
[SQL テンプレート ID] |
スロットリングする SQL テンプレートの ID。8 文字の 16 進数文字列です。複数の SQL テンプレート ID は、コンマ ( 説明
[Throttling Mode] を [SQLテンプレートの調整] に設定した場合、PolarDB-X インスタンスではこのパラメーターが必須です。 |
|
[最小 SQL 実行時間] |
SQL の実行時間に対するしきい値です。SQL ステートメントの実行時間が指定したしきい値を超えると、システムはその SQL ステートメントのテンプレート ID をスロットリングルールに追加します。 説明
[Throttling Mode] を [時間のかかる電流制限を実行する] に設定した場合、PolarDB-X インスタンスではこのパラメーターが必須です。 |
|
[スロットリング対象クエリ数の最大値] |
実行時間に基づいてスロットリング可能な SQL テンプレート ID の最大数です。この上限に達すると、実行時間がしきい値を超えた他の SQL ステートメントに対しては、スロットリングルールが作成されなくなります。 説明
[Throttling Mode] を [時間のかかる電流制限を実行する] に設定した場合、PolarDB-X インスタンスではこのパラメーターが必須です。 |
|
[スロットリング対象クエリが発生したデータベースアカウント] |
スロットリングする SQL ステートメントに関連付けられたデータベースアカウントです。 説明
[Throttling Mode] を [キーワードによるスロットリング] または [SQLテンプレートの調整] に設定した場合、このパラメーターは必須です。 |
MongoDB
パラメーター | 説明 |
操作タイプ | 速度制限する操作タイプを選択します。複数のタイプを選択できます。有効な値: |
操作の同時実行数 | 選択した操作タイプで許可される同時操作の最大数を指定します。このしきい値を超えたリクエストは速度制限されます。 |
スロットリング持続時間 | スロットリングルールがアクティブである期間を設定します。ルールが有効期限切れになると、システムは自動的にルールを無効にし、終了 タブに移動します。 |
Kill Statement | (オプション) このオプションを有効にすると、スロットリングルールが有効になったときに、システムはルールに一致するアクティブな操作 (長時間実行されている |
流量制御の範囲 | このオプションは、ApsaraDB for MongoDB シャードクラスターインスタンスでのみ利用可能です。ルールは All Shards または Partial Shards に適用できます。 |
スロットリングされたコレクション | ルールを適用するコレクションを指定します。 |
関連トピック
関連 API
|
API |
説明 |
|
SQL スロットリングを有効にします。 |
|
|
指定したスロットリングルールを無効にします。 |
|
|
実行中のスロットリングルールをすべて無効にします。 |
|
|
実行中のスロットリングルールを返します。 |
|
|
実行中、またはトリガーされたスロットリングルールを返します。 |
|
|
SQL ステートメントからスロットリングキーワードを生成します。 |