Database Autonomy Service (DAS) は、データベースアクセスリクエストの数と同時 SQL リクエストの数を制御する SQL スロットリング機能を提供します。 この機能は、データベースサービスの可用性を確保するのに役立ちます。 このトピックでは、SQL スロットリング機能の使用方法について説明します。
前提条件
SQL スロットリングを有効にするデータベースインスタンスは、次のデータベースエンジンのいずれかで実行されています。
ApsaraDB RDS for MySQL 5.6、5.7、および 8.0
ApsaraDB RDS for PostgreSQL 14 以降
PolarDB for MySQL 5.6、5.7、および 8.0
PolarDB-X 2.0
スロットリングメッセージ
SQL スロットリングルールが作成された後、アプリケーションが指定されたすべてのキーワードを含む SQL 文を使用するか、テンプレートスロットリングルールに一致する場合、データベースシステムはスロットリングが有効になるとインスタンスバージョンに基づいて対応するメッセージを返します。
最大同時実行数 | インスタンスバージョン | エラーコード | エラーメッセージ |
0 または正の整数 |
| 1317 |
|
正の整数 | 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 | 7533 | ||
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 | 7534 |
DAS が SQL スロットリングを実行する場合、
ccl_max_waiting_count
パラメーターが 0 に設定されていると、DAS はこのパラメーターをデフォルト値の 10 に設定します。 値が 0 より大きい場合、DAS は設定された値を直接使用します。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 文の動作を制御できます。ccl_mode
パラメーターの有効な値:WAIT
(デフォルト): キューで待機します。REFUSE
: 待機せずにエラーメッセージを直接返します。
シナリオ
シナリオ | 説明 |
特定の種類の同時 SQL 文の数が急増する | キャッシュペネトレーションまたは異常な呼び出しにより、同時 SQL 文の数が予期せず増加する可能性があります。 |
データスキューを引き起こす SQL 文が存在する | プロモーションイベント中にホットデータが頻繁にクエリされると、システム全体が遅くなります。 |
インデックステーブルがない | インデックスされていないテーブルで多数の SQL 文が実行されると、システム全体が遅くなります。 |
スロットリングモード
モード | 説明 | サポートされているデータベース |
キーワードによるスロットリング | 指定されたキーワードを含む SQL 文をスロットリングします。 説明 特定の SQL 文をスロットリングすることはできません。 |
|
[SQL テンプレートによるスロットリング] | 入力した SQL サンプルから抽出された SQL テンプレートを使用する SQL 文をスロットリングします。 |
|
指定された ID の SQL テンプレートを使用する SQL 文をスロットリングします。 SQL テンプレート ID は、SQL ログ、セッション、および EXPLAIN 文の実行後に返される結果から取得できます。 説明 SQL テンプレートの ID は、8 文字の長さの 16 進数文字列です。 | PolarDB-X 2.0 Enterprise Edition | |
[実行時間によるスロットリング] | 実行時間によって SQL 文をスロットリングします。 指定されたタイプの SQL 文の実行時間が指定されたしきい値を超えると、システムは SQL 文で使用されている SQL テンプレートの ID を取得し、その ID をスロットリングルールに追加します。 その後、SQL テンプレートを使用する SQL 文は、指定された同時実行数で実行されます。 説明 SQL テンプレート ID の最大数を設定できます。 スロットリングルールに追加された SQL テンプレート ID の数が上限に達すると、システムは SQL テンプレート ID の取得を停止します。 | PolarDB-X 2.0 Enterprise Edition |
手順
DAS コンソール にログインします。
左側のナビゲーションウィンドウで、[インテリジェント O&M センター] > インスタンスモニター を選択します。
表示されたページで、管理するデータベースインスタンスを見つけ、インスタンス ID をクリックします。 インスタンスの詳細ページが表示されます。
左側のナビゲーションウィンドウで、インスタンスセッション をクリックします。
セッション管理 タブで、SQL スロットリング をクリックします。
表示されたパネルで、[スロットリングルールを作成] をクリックします。
[スロットリングルールを作成] ダイアログボックスで、データベースエンジンに基づいて次のパラメーターを設定します。
[スロットリングモード] が [キーワードによるスロットリング] に設定されている場合、このパラメーターは必須です。
INSERT SQL 文は、次のデータベースエンジンのいずれかでスロットリングできます。
ApsaraDB RDS for MySQL 8.0
PolarDB for MySQL 5.7 および 8.0
PolarDB-X 2.0
INSERT...SELECT...
形式の SQL ステートメントはスロットルできません。[スロットリングモード] が [キーワード別スロットリング] に設定されている場合、このパラメーターは必須です。
複数のキーワードを指定した場合、SQL 文に指定されたすべてのキーワードが含まれている場合にのみスロットリングがトリガーされます。複数のキーワードは、チルダ(~)で区切られ、順序の制限はありません。
たとえば、スロットル対象の元の 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 サンプルを最適化します。そのため、最適化後も速度制限の効果に影響はありません。
たとえば、SQL サンプル
select name from das where name = 'das' and age = 21 limit 20
を入力すると、DAS はそれを SQL テンプレートselect name from das where name = ? and age = ? limit ?
に変換し、さらにテンプレートをselect name from das where name = 'param0' and age = 'param1' limit 20
に書き換えます。スロットリングモードがSQL テンプレートによるスロットルに設定されている場合、このパラメーターは必須です。
複雑な SQL 文の場合、DAS は SQL テンプレート構造を変更せずに SQL サンプルを最適化します。したがって、最適化後もスロットリング効果は影響を受けません。
たとえば、SQL サンプル
select name from das where name = 'das' and age = 21 limit 20
を入力すると、DAS はそれを SQL テンプレートselect name from das where name = ? and age = ? limit ?
に変換し、さらにテンプレートをselect name from das where name = 'param0' and age = 'param1' limit 20
に書き換えます。INSERT
SQL 文は、次のデータベースエンジンのいずれかでスロットルできます。ApsaraDB RDS for MySQL 8.0
PolarDB for MySQL 5.7 および 8.0
PolarDB-X 2.0
INSERT...SELECT...
形式の SQL 文はスロットルできません。[スロットリングモード] が [キーワードによるスロットル] に設定されている場合、このパラメーターは必須です。
複数のキーワードを指定した場合、SQL 文に指定されたすべてのキーワードが含まれている場合にのみ、スロットリングがトリガーされます。複数のキーワードは、順次制限なしでチルダ (~) で区切られます。
たとえば、スロットルする元の 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 サンプルを最適化します。したがって、最適化後もスロットリング効果は影響を受けません。
たとえば、SQL サンプル
select name from das where name = 'das' and age = 21 limit 20
を入力すると、DAS はそれを SQL テンプレートselect name from das where name = ? and age = ? limit ?
に変換し、さらにテンプレートをselect name from das where name = 'param0' and age = 'param1' limit 20
に書き直します。INSERT
SQL 文は、次のデータベースエンジンのいずれかでスロットルできます。ApsaraDB RDS for MySQL 8.0
PolarDB for MySQL 5.7 および 8.0
PolarDB-X 2.0
INSERT...SELECT...
形式の SQL 文はスロットルできません。スロットリングモード が キーワードによるスロットル に設定されている場合、このパラメーターは必須です。
複数のキーワードを指定した場合、SQL 文に指定されたすべてのキーワードが含まれている場合にのみ、スロットリングがトリガーされます。複数のキーワードは、順次制限なしでチルダ (~) で区切られます。
たとえば、スロットルする元の 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 文を制限するために使用するモード。
速度制限ルール
キーワードによる制限: 設定された速度制限キーワード。
SQL テンプレートによる制限: 制限されるサンプルに対応するテンプレート ID。
実行時間による制限: 設定された実行時間のしきい値と、テンプレートによって制限される SQL 文の数。
最大同時実行数
同時実行される SQL 文の最大数。
最大待機クエリ数
速度制限ルールで設定された待機中の SQL 文の最大数。
説明このパラメーターは、データベースインスタンスが ApsaraDB RDS for PostgreSQL で、速度制限モード が SQL テンプレートによる制限 に設定されている場合に表示されます。
速度制限時間 (分)
SQL 速度制限ルールが有効になる期間。
開始時間
速度制限ルールが有効になる時間。
残り時間 (秒)
速度制限ルールの有効期限が切れるまでの残り時間。
サンプル SQL
制限する SQL 文のサンプル。
説明このパラメーターは、速度制限モード が SQL テンプレートによる制限 に設定されている場合に表示されます。
速度制限テンプレート ID
制限する SQL 文のサンプルで使用される SQL テンプレートの ID。
説明このパラメーターは、速度制限モード が SQL テンプレートによる制限 に設定されている場合に表示されます。
ステータス
有効になっている速度制限ルールの実行ステータス。
データベース
SQL 文が制限されるデータベース。
説明このパラメーターは、速度制限モード が SQL テンプレートによる制限 に設定されている場合に表示されます。
検索パス
SQL 速度制限を実行するための検索パス。
説明このパラメーターは、データベースインスタンスが ApsaraDB RDS for PostgreSQL で、速度制限モード が SQL テンプレートによる制限 に設定されている場合に表示されます。
一致した SQL クエリ
速度制限ルールに一致した SQL 文の数。
説明このパラメーターは、速度制限モード が SQL テンプレートによる制限 に設定されている場合に表示されます。
待機中の SQL クエリ
速度制限ルールで待機中の SQL 文の数。
説明このパラメーターは、速度制限モード が SQL テンプレートによる制限 に設定されている場合に表示されます。
アクション
速度制限ルールを 無効にする か 変更する 操作。
ApsaraDB RDS for MySQL
パラメーター | 説明 |
[スロットリングモード] | SQL 文のスロットリングに使用するモード。 ビジネス要件に基づいて スロットリングモード を選択します。 |
[SQL タイプ] | スロットリングする SQL 文のタイプ。 有効な値: [SELECT]、[UPDATE]、[DELETE]、および [INSERT]。 説明 |
データベース | SQL 文がスロットルされるデータベース。 説明 このパラメーターは、[スロットリングモード] が [SQL テンプレート別スロットル] に設定されている場合に必須です。 |
最大同時実行数 | 同時実行される SQL 文の最大数です。このパラメーターの最小値は 0 です。 説明 スロットリングポリシーを満たし、同時に実行されている SQL 文の数が最大同時実行数に達すると、スロットリングがトリガーされます。 |
スロットリング期間 | SQL スロットリングルールが有効になる期間です。 重要 スロットリング機能は、緊急時の使用のみを目的としています。ビジネス要件に基づいてスロットリング期間を指定し、不要になった場合はスロットリングを無効にすることをお勧めします。 |
SQL キーワード | スロットルが必要な SQL 文を識別するために使用されるキーワードです。 説明 |
SQL サンプル | 速度制限の対象にする SQL 文のサンプルです。 説明 |
ApsaraDB RDS for PostgreSQL
パラメーター | 説明 |
スロットリングモード | SQL 文をスロットルするために使用するモード。SQL テンプレートによるスロットルのみがサポートされています。 |
データベース | SQL 文がスロットルされるデータベース。 |
検索パス | SQL スロットリングを実行する検索パス。 説明 複数のパスはカンマ( |
最大同時実行数 | 同時実行される SQL 文の最大数。このパラメーターの最小値は 0 です。 説明 スロットリングポリシーを満たす同時実行 SQL 文の数が最大同時実行数に達すると、スロットリングがトリガーされます。 |
最大待機クエリ数 | 待機中の SQL 文の最大数。 |
スロットリング期間 | SQL スロットリングルールが有効になる期間。 重要 スロットリング機能は緊急時の使用のみを目的としています。ビジネス要件に基づいてスロットリング期間を指定し、不要になった場合はスロットリングを無効にすることをお勧めします。 |
SQL サンプル | スロットルする SQL 文のサンプル。 説明 |
PolarDB for MySQL
パラメーター | 説明 |
スロットリングモード | SQL 文をスロットルするために使用するモード。ビジネス要件に基づいて スロットリングモード を選択します。 |
SQL タイプ | スロットルする SQL 文のタイプ。有効な値: 説明 |
最大同時実行数 | 同時実行される SQL 文の最大数。このパラメーターの最小値は 0 です。 説明 スロットリングポリシーを満たし、同時に実行される SQL 文の数が最大同時実行数に達すると、スロットリングがトリガーされます。 |
データベース | SQL 文がスロットルされるデータベース。 説明 [スロットリングモード] が [SQL テンプレートによるスロットル] に設定されている場合、このパラメーターは必須です。 |
スロットリング期間 | SQL スロットリングルールが有効になる期間。 重要 スロットリング機能は緊急時のみに使用することを目的としています。ビジネス要件に基づいてスロットリング期間を指定し、不要になった場合はスロットリングを無効にすることをお勧めします。 |
SQL キーワード | スロットルする必要がある SQL 文を識別するために使用されるキーワード。 説明 |
SQL サンプル | スロットルする SQL 文のサンプル。 説明 |
PolarDB-X 2.0
パラメーター | 説明 |
スロットリングモード | SQL 文をスロットルするために使用するモード。ビジネス要件に基づいて スロットリングモード を選択します。 |
SQL タイプ | スロットルする SQL 文のタイプ。有効な値: 説明 |
最大同時実行数 | 同時実行される SQL 文の最大数。このパラメーターの最小値は 0 です。 説明 スロットリングポリシーを満たし、同時に実行される SQL 文の数が最大同時実行数に達すると、スロットリングがトリガーされます。 |
スロットリング期間 | SQL スロットリングルールが有効になる期間。 重要 スロットリング機能は緊急時のみを対象としています。ビジネス要件に基づいてスロットリング期間を指定し、不要になったらスロットリングを無効にすることをお勧めします。 |
SQL キーワード | スロットルする必要がある SQL 文を識別するために使用されるキーワード。 説明 |
SQL テンプレート ID | スロットルする SQL 文で使用される SQL テンプレートの ID。複数の ID はコンマ (,) で区切ります。 説明 データベースエンジンが PolarDB-X Enterprise Edition で、スロットリングモード が SQL テンプレートによるスロットル に設定されている場合、このパラメーターは必須です。 |
SQL の最小実行時間 | SQL 実行時間のしきい値。SQL 文の実行時間がこのしきい値を超えると、DAS はこの SQL 文が属する SQL テンプレートの ID をスロットリングルールに追加します。 説明 インスタンスが PolarDB-X Enterprise Edition インスタンスで、スロットリングモード が 実行時間によるスロットル に設定されている場合、このパラメーターは必須です。 |
スロットルされる SQL ID の最大数 | 実行時間によってスロットルできる SQL テンプレート ID の最大数。このしきい値に達すると、DAS は実行時間のしきい値に達した他の SQL 文のスロットリングルールの作成を停止します。 説明 インスタンスが PolarDB-X Enterprise Edition インスタンスで、スロットリングモード が 実行時間によるスロットル に設定されている場合、このパラメーターは必須です。 |
クエリがスロットルされたデータベースアカウント | スロットルされた SQL が属するデータベースアカウント。 説明 スロットリングモード が キーワードによるスロットル または SQL テンプレートによるスロットル に設定されている場合、このパラメーターは必須です。 |
参考文献
関連 API 操作
API 操作 | 説明 |
SQL スロットリングを有効にします。 | |
スロットリングルールを無効にします。 | |
有効になっているすべてのスロットリングルールを無効にします。 | |
有効になっているスロットリングルールを照会します。 | |
有効になっているか、トリガーされたスロットリングルールを照会します。 | |
SQL 文のスロットリングキーワードを生成します。 |