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。
スロットリングメッセージ
SQL スロットリングルールを作成した後、アプリケーションが指定されたすべてのキーワードを含むか、テンプレートに一致する SQL 文を実行すると、スロットリングがトリガーされたときにデータベースシステムがメッセージを返します。返されるメッセージは、インスタンスのバージョンによって異なります。
最大同時実行数 | インスタンスバージョン | エラーコード | エラーメッセージ |
0 または正の整数 |
| 1317 |
|
正の整数 | マイナーエンジンバージョンが 20200630 以降の ApsaraDB RDS for MySQL 5.7 | 5041 |
説明 最大同時実行数が正の整数の場合、関連する SQL 文は |
ApsaraDB RDS for MySQL 8.0 | 7534 | ||
PolarDB for MySQL 5.7 | 3277 | ||
PolarDB for MySQL 8.0 | 7533 | ||
0 | マイナーエンジンバージョンが 20200630 以降の ApsaraDB RDS for MySQL 5.7 | 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 は設定された値を使用します。マイナーエンジンバージョンが 20200630 以降の ApsaraDB RDS for MySQL 5.7 インスタンスおよび 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 テンプレート ID を照合して SQL 文をスロットリングします。SQL ログ、セッション、および EXPLAIN の結果から SQL テンプレート ID を取得できます。 説明 SQL テンプレート ID は 8 文字の 16 進数文字列です。 | PolarDB-X 2.0 Enterprise Edition | |
実行時間スロットリング | 実行時間に基づいて SQL 文をスロットリングします。このモードのルールを作成した後、指定されたタイプの SQL 文の実行時間がしきい値を超えると、その SQL 文のテンプレート ID が自動的にスロットリングルールに追加されます。その後、SQL 文はルールで指定された同時実行数に基づいて実行されます。 説明 スロットリングされる SQL テンプレート ID の数に制限を設定することもできます。制限に達すると、他の SQL 文に対してスロットリングルールは作成されなくなります。 | PolarDB-X 2.0 Enterprise Edition |
手順
DAS コンソールにログインします。
左側のナビゲーションウィンドウで、[オペレーションセンター] > [インスタンスモニタリング] をクリックします。
ターゲットインスタンスを見つけ、インスタンス ID をクリックして、インスタンス詳細ページに移動します。
左側のナビゲーションウィンドウで、インスタンスセッション をクリックします。
セッション管理 ページで、SQL スロットリング をクリックします。
表示されるダイアログボックスで、[スロットリングルールの作成] をクリックします。
[スロットリングルールの作成] ダイアログボックスで、データベースエンジンに基づいてパラメーターを設定します。
このパラメーターは、[スロットリングモード] を [キーワードスロットリング] に設定する場合に必要です。
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に書き換えられます。このパラメーターは、[スロットリングモード] を [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...文はスロットリングできません。このパラメーターは、[スロットリングモード] を [キーワードスロットリング] に設定する場合に必要です。
複数のキーワードを設定した場合、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に書き換えられます。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 テンプレートスロットリング: スロットリングされたサンプルに対応するテンプレート ID。
実行時間スロットリング: 設定された実行時間のしきい値と、テンプレートによってスロットリングされた SQL 文の数。
最大同時実行数
同時実行 SQL 文の最大数。
最大待機数
スロットリングルールで設定された待機中の文の最大数。
説明このパラメーターは、データベースインスタンスが ApsaraDB RDS for PostgreSQL で、[スロットリングモード] が [SQL テンプレートスロットリング] に設定されている場合に表示されます。
スロットリング期間 (分)
SQL スロットリングルールの有効期間。
開始時間
スロットリングルールが有効になるように設定された時間。
残り時間
スロットリングルールが期限切れになるまでの残り時間。
スロットリングされた SQL サンプル
スロットリングされた SQL サンプルの構成。
説明このパラメーターは、[スロットリングモード] を [SQL テンプレートスロットリング] に設定した場合に表示されます。
スロットリングテンプレート ID
スロットリングされた SQL サンプルに対応するテンプレート ID。
説明このパラメーターは、[スロットリングモード] を [SQL テンプレートスロットリング] に設定した場合に表示されます。
ステータス
実行中のルールには「有効」ステータスがあります。
データベース
SQL 文がスロットリングされるデータベース。
説明このパラメーターは、[スロットリングモード] を [SQL テンプレートスロットリング] に設定した場合に表示されます。
検索パス
スロットリングされた SQL 文に対応する検索パス。
説明このパラメーターは、データベースインスタンスが ApsaraDB RDS for PostgreSQL で、[スロットリングモード] が [SQL テンプレートスロットリング] に設定されている場合に表示されます。
一致した SQL 文の数
スロットリングルールによって一致した SQL 文の数。
説明このパラメーターは、[スロットリングモード] を [SQL テンプレートスロットリング] に設定した場合に表示されます。
待機中の SQL 文の数
スロットリングルールで待機している SQL 文の数。
説明このパラメーターは、[スロットリングモード] を [SQL テンプレートスロットリング] に設定した場合に表示されます。
アクション
スロットリングルールを[無効化]または[変更]するためのボタン。
ApsaraDB RDS for MySQL
パラメーター | 説明 |
スロットリングモード | 必要に応じて スロットリングモード を選択します。 |
SQL タイプ | SQL 文のタイプを選択します。有効な値: SELECT、UPDATE、DELETE、および INSERT。 説明 |
データベース | SQL 文がスロットリングされるデータベース。 説明 このパラメーターは、[スロットリングモード] を [SQL テンプレートスロットリング] に設定する場合に必要です。 |
最大同時実行数 | 同時実行 SQL 文の最大数。最小値は 0 です。 説明 ポリシーを満たす同時に実行されている SQL 文の数が最大同時実行数に達すると、スロットリングがトリガーされます。 |
スロットリング期間 | SQL スロットリングルールの有効期間。 重要 SQL スロットリングは緊急措置です。必要に応じて期間を設定し、不要になったらルールを無効にしてください。 |
SQL キーワード | スロットリングする SQL 文のキーワード。 説明 |
SQL サンプル | スロットリングするサンプル SQL 文。 説明 |
ApsaraDB RDS for PostgreSQL
パラメーター | 説明 |
スロットリングモード | ApsaraDB RDS for PostgreSQL は SQL テンプレートスロットリングのみをサポートします。 |
データベース | SQL 文がスロットリングされるデータベース。 |
検索パス | SQL スロットリングの検索パス。 説明 複数のパスはカンマ ( |
最大同時実行数 | 同時実行 SQL 文の最大数。最小値は 0 です。 説明 ポリシーを満たす同時に実行されている SQL 文の数が最大同時実行数に達すると、スロットリングがトリガーされます。 |
最大待機数 | 待機中の文の最大数。 |
スロットリング期間 | SQL スロットリングルールの有効期間。 重要 SQL スロットリングは緊急措置です。必要に応じて期間を設定し、不要になったらルールを無効にしてください。 |
SQL サンプル | スロットリングするサンプル SQL 文。 説明 |
PolarDB for MySQL
パラメーター | 説明 |
スロットリングモード | 必要に応じて スロットリングモード を選択します。 |
SQL タイプ | SQL 文のタイプを選択します。有効な値: 説明 |
最大同時実行数 | 同時実行 SQL 文の最大数。最小値は 0 です。 説明 ポリシーを満たす同時に実行されている SQL 文の数が最大同時実行数に達すると、スロットリングがトリガーされます。 |
データベース | SQL 文がスロットリングされるデータベース。 説明 このパラメーターは、[スロットリングモード] を [SQL テンプレートスロットリング] に設定する場合に必要です。 |
スロットリング期間 | SQL スロットリングルールの有効期間。 重要 SQL スロットリングは緊急措置です。必要に応じて期間を設定し、不要になったらルールを無効にしてください。 |
SQL キーワード | スロットリングする SQL 文のキーワード。 説明 |
SQL サンプル | スロットリングするサンプル SQL 文。 説明 |
PolarDB-X 2.0
パラメーター | 説明 |
スロットリングモード | 必要に応じて スロットリングモード を選択します。 |
SQL タイプ | SQL 文のタイプを選択します。有効な値: 説明 |
最大同時実行数 | 同時実行 SQL 文の最大数。最小値は 0 です。 説明 ポリシーを満たす同時に実行されている SQL 文の数が最大同時実行数に達すると、スロットリングがトリガーされます。 |
スロットリング期間 | SQL スロットリングルールの有効期間。 重要 SQL スロットリングは緊急措置です。必要に応じて期間を設定し、不要になったらルールを無効にしてください。 |
SQL キーワード | スロットリングする SQL 文のキーワード。 説明 |
SQL テンプレート ID | スロットリングする SQL テンプレートの ID。ID は 8 文字の 16 進数文字列です。複数の SQL テンプレート ID はカンマ ( 説明 このパラメーターは、インスタンスが PolarDB-X Enterprise Edition で、[スロットリングモード] を [SQL テンプレートスロットリング] に設定する場合に必要です。 |
最小 SQL 実行時間 | SQL 実行時間のしきい値。SQL 文の実行時間がしきい値を超えると、システムは SQL 文が属する SQL テンプレートの ID をスロットリングルールに追加します。 説明 このパラメーターは、インスタンスが PolarDB-X Enterprise Edition で、[スロットリングモード] を [実行時間スロットリング] に設定する場合に必要です。 |
スロットリングされる SQL ID の最大数 | 実行時間に基づいてスロットリングできる SQL テンプレート ID の最大数。この制限に達すると、システムは実行時間がしきい値を超える他の SQL 文のスロットリングルールを作成しなくなります。 説明 このパラメーターは、インスタンスが PolarDB-X Enterprise Edition で、[スロットリングモード] を [実行時間スロットリング] に設定する場合に必要です。 |
スロットリングされた SQL のデータベースアカウント | スロットリングされた SQL 文が属するデータベースアカウント。 説明 このパラメーターは、[スロットリングモード] を [キーワードスロットリング] または [SQL テンプレートスロットリング] に設定する場合に必要です。 |
リファレンス
関連 API 操作
API | 説明 |
SQL スロットリングを有効にします。 | |
指定されたスロットリングルールを無効にします。 | |
実行中のすべてのスロットリングルールを無効にします。 | |
実行中のスロットリングルールを取得します。 | |
実行中またはトリガーされたスロットリングルールを取得します。 | |
SQL 文からスロットリングキーワードを生成します。 |