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

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

最終更新日:Nov 13, 2024

Database Autonomy Service (DAS) は、SQL スロットリング機能を提供します。 データベースアクセス要求の数と同時SQL要求の数は、SQLスロットリング機能を使用して制御できます。 この機能は、データベースサービスの可用性を確保するのに役立ちます。 このトピックでは、ApsaraDB RDS for MySQLインスタンスにSQLスロットリングを使用する方法について説明します。

前提条件

SQLスロットリングを有効にするデータベースインスタンスは、次のデータベースエンジンのいずれかで実行されます。

  • ApsaraDB RDS for MySQLの5.6、5.7、8.0

  • PolarDB for MySQLの5.6、5.7、8.0

  • PolarDB-Xの2.0

シナリオ

シナリオ

説明

特定の型の同時SQL文の数の急激な増加

キャッシュの侵入または異常な呼び出しにより、同時SQL文の数が予期せず増加する可能性があります。

データスキューの原因となるSQL文の存在

プロモーションイベント中に大量のデータが照会されると、システム全体の速度が低下します。

インデックステーブルの欠如

インデックスが作成されていないテーブルで大量のSQL文を実行すると、システム全体の速度が低下します。

スロットルモード

次の表に、サポートされるスロットリングモードを示します。

パラメーター

説明

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

スロットルされたキーワード

指定したキーワードを含むSQL文をスロットルします。

  • ApsaraDB RDS for MySQL

  • PolarDB for MySQL

  • PolarDB-Xの2.0

SQLテンプレートID

指定されたIDを持つSQLテンプレートを使用するSQL文をスロットルします。 SQLテンプレートIDは、EXPLAINステートメントの実行後に返されるSQLログ、セッション、および結果から取得できます。

説明

SQLテンプレートのIDは、長さが8文字の16進文字列です。

PolarDB-Xの2.0

実行期間によって制限される

実行期間ごとにSQL文をスロットします。 指定された型のSQL文の実行期間が指定されたしきい値を超えた場合、システムはSQL文で使用されているSQLテンプレートのIDをフェッチし、そのIDをスロットリングルールに追加します。 次に、SQLテンプレートを使用するSQL文が、指定された同時実行性で実行されます。

説明

SQLテンプレートIDの最大数を設定できます。 スロットルルールに追加されたSQLテンプレートIDの数が上限に達すると、システムはSQLテンプレートIDの取得を停止します。

PolarDB-Xの2.0

手順

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

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

  3. 表示されるページで、管理するデータベースインスタンスを見つけ、インスタンスIDをクリックします。 インスタンス詳細ページが表示されます。

  4. 左側のペインで、インスタンスセッションをクリックします。

  5. セッション管理タブで、SQL スロットリング[インスタンスセッション] セクションでのSQL スロットリング をクリックします。

    ss

  6. SQL スロットリングダイアログボックスで、次の表に示すパラメーターを設定します。

    パラメーター

    説明

    スロットリングモード

    SQL文をスロットルするために使用するモード。 ビジネス要件に基づいてスロットリングモードを選択します。 詳細については、このトピックの「スロットルモード」をご参照ください。

    SQLタイプ

    スロットルするSQL文のタイプ。 有効な値: SELECTUPDATEDELETEINSERT

    説明
    • INSERT SQL文は、次のデータベースエンジンのいずれかでスロットルできます。

      • ApsaraDB RDS for MySQL 8.0

      • PolarDB for MySQLの5.7と8.0

      • PolarDB-Xの2.0

    • INSERT...SELECT... 形式のSQL文はスロットリングできません。

    最大同時実行数

    同時実行 SQL 文の最大数です。 このパラメータの最小値は1です。

    同時に実行され、スロットリングポリシーを満たすSQL文の数が最大値に達すると、スロットリングがトリガーされます。

    スロットル期間

    SQLスロットリングルールが有効になる期間。 スロットル機能は、緊急使用のみを目的としています。 ビジネス要件に基づいてスロットリング期間を指定し、不要になったときにスロットリングを無効にすることを推奨します。

    SQLキーワード

    スロットルが必要なSQL文を識別するために使用されるキーワード。

    説明

    このパラメーターは、Throttling ModeパラメーターがThrottled by Keywordsに設定されている場合にのみ有効になります。

    • 複数のキーワードを指定した場合、指定したすべてのキーワードがSQL文に含まれている場合にのみスロットリングがトリガーされます。 複数のキーワードは、連続的な制限なしでチルダ (~) で区切られます。

    • SQL Keywordsパラメーターは、SELECT、UPDATE、またはDELETEのみに設定することはできません。 キーワードは、以前のバージョンのインスタンスを除いて、インスタンスの場合は大文字と小文字が区別されます。

    たとえば、スロットリングされる元のSQL文がSELECT min(id), max(id) FROM task_event WHERE gmt_modified < '2020-06-21 'AND begin_time > '2020-07-09' ANDソース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に設定します。

    テンプレートID

    スロットルするSQL文で使用されるSQLテンプレートのID。 ID が複数ある場合は、コンマ (,) で区切ります。

    説明

    このパラメーターは、Throttling ModeパラメーターがThrottled by SQL Template IDに設定されている場合にのみ有効になります。

    実行日時

    実行期間のしきい値。 SQL文の実行期間が指定されたしきい値を超えると、システムはSQL文で使用されているSQLテンプレートのIDを取得し、そのIDをスロットリングルールに追加します。

    説明

    このパラメーターは、[スロットリングモード] パラメーターが [実行期間によるスロットル] に設定されている場合にのみ有効になります。

    スロット付きクエリの最大数

    SQL文で使用されるSQLテンプレートのIDの最大数が、実行時間によって制限されます。 スロットルルールに追加されたSQLテンプレートIDの数が上限に達すると、システムは、実行時間が指定されたしきい値を超えたSQL文で使用されているSQLテンプレートのIDの取得を停止します。

    説明

    このパラメーターは、[スロットリングモード] パラメーターが [実行期間によるスロットル] に設定されている場合にのみ有効になります。

    Throttledクエリのデータベースアカウント

    slottled SQL文が属するデータベースアカウント。

    説明

    このパラメーターは、SQLスロットリングを有効にするデータベースインスタンスがPolarDB-X 2.0インスタンスで、スロットリングモードパラメーターがThrottled by KeywordsまたはThrottled by SQL Template IDに設定されている場合にのみ有効になります。

    説明

    SQLスロットリングルールが作成された後、指定されたすべてのキーワードを含むSQL文に対して送信された要求に応答する場合、さまざまな種類のデータベースサービスが異なる方法で動作します。

    • MySQL 5.6または5.7を実行するApsaraDB RDS For MySQLインスタンス、またはMySQL 5.6を実行するPolarDB for MySQLクラスターの場合、対応するデータベースシステムはエラーコード1317と「クエリ実行が中断されました」エラーメッセージを返します。

    • MySQL 8.0を実行するApsaraDB RDS For MySQLインスタンス、またはMySQL 5.7または8.0を実行するPolarDB for MySQLクラスターの場合、SQL文は同時実行コントロール待機状態になります。 データベースインスタンスのバージョンがccl_max_waiting_countパラメーターをサポートしている場合、同時実行制御待機状態のSQL文の数がccl_max_waiting_countパラメーターで指定されたしきい値を超えると、対応するデータベースシステムは次のいずれかのエラーコードと「同時実行制御待機数がmax待機数を超えました」というエラーメッセージを返します。

      • MySQL 8.0を実行するApsaraDB RDS for MySQLインスタンスのERROR 7534 (HY000)

      • MySQL 5.7を実行するPolarDB for MySQLクラスターのエラー3277 (HY000)

      • MySQL 8.0を実行するPolarDB for MySQLクラスターのエラー7533 (HY000)

      ccl_max_waiting_countパラメーターがデフォルト値0に設定されている場合、すべてのスロットリングされたSQL文は同時実行制御待機状態になり、エラーコードは返されません。 DASがSQLスロットリングを実行するとき、ccl_max_waiting_countパラメーターの値が0の場合、DASで定義されたデフォルト値にccl_max_waiting_countパラメーターを設定します。 デフォルト値は 10 です。

  7. 作成をクリックします。

    SQLスロットリングルールの作成後、[実行中] タブでルールに関する情報を表示できます。

    スロットリングルールを無効化または変更するには、[操作] 列の [無効化] または [編集] をクリックします。

関連ドキュメント

自動SQLスロットリングの設定

関連する API 操作

API 操作

説明

EnableSqlConcurrencyControl

SQLスロットリングを有効にします。

DisableSqlConcurrencyControl

スロットルルールを無効にします。

DisableAllSqlConcurrencyControlRules

有効なすべてのスロットルルールを無効にします。

GetRunningSqlConcurrencyControlRules

有効なスロットルルールを照会します。

GetSqlConcurrencyControlRulesHistory

有効またはトリガーされたスロットルルールを照会します。

GetSqlConcurrencyControlKeywordsFromSqlText

SQL文のスロットリングキーワードを生成します。