予期しないトラフィックの急増によりSQL文の同時実行数が大幅に増加した場合、一部のSQL文が大量のデータベースリソースを消費した場合、またはインデックスのないSQL文が大量に実行された場合、SQL文の同時実行を制限してビジネスの安定性を確保する必要があります。 Database Autonomy Service (DAS) は、自動 SQL スロットリング機能を提供します。 この機能は、SQLステートメントの特性を自動的に抽出し、問題のあるSQLステートメントをキーワードでスロットルします。
前提条件
RDSインスタンスは、次のMySQLバージョンとRDSエディションのいずれかを実行します。
RDS High-availability EditionまたはRDS Enterprise EditionのMySQL 8.0
RDS High-availability EditionまたはRDS Enterprise EditionのMySQL 5.7
RDS High-availability EditionのMySQL 5.6
シナリオ
自動 SQL スロットリング機能は、次のシナリオに適しています。
トラフィック: キャッシュ侵入例外または疑わしい要求により、特定のタイプの同時SQLクエリが急増します。
データ: 多数のSQLクエリが同じソースから送信されます。 例えば、オンライン・ショッピング・プラットフォームのユーザは、多数の注文を出す。 この場合、ユーザーアカウントに関連する多数のSQLクエリが送信されます。 SQLクエリは、インスタンス上の大量のデータベースリソースを消費します。
SQL文: インデックスが作成されていない多数のSQL文が実行されます。 これはワークロードに影響します。
制限事項
自動SQLスロットリングのスロットリングモードは、Throttled by Keywordsです。
SELECT、UPDATE、DELETE、INSERTのSQL文を調整できます。
INSERT...SELECT... 型のSQL文はスロットルできません。
MySQL 8.0を実行するApsaraDB RDS for MySQLインスタンスと、MySQL 5.7または8.0を実行するPolarDB for MySQLクラスターのみが、INSERTタイプのSQL文をスロットルできます。
制限事項
自動SQLスロットリングのスロットリングモードは、Throttled by Keywordsです。
SELECT、UPDATE、DELETE、INSERTのSQL文を調整できます。
説明MySQL 8.0を実行するApsaraDB RDS for MySQLインスタンスと、MySQL 5.7または8.0を実行するPolarDB for MySQLクラスターのみが、INSERTタイプのSQL文をスロットルできます。
INSERT...SELECT... 型のSQL文はスロットルできません。
機能の説明
自動SQLスロットリング機能を有効にすると、すべてのSQLキーワードを含むSQL文に対して異なる種類のデータベースサービスが異なる応答をします。
RDSインスタンスがMySQL 5.6またはMySQL 5.7を実行している場合、1317: "query execution was interrupted" エラーが返されます。
RDSインスタンスがMySQL 8.0を実行している場合、システムは関連するSQL文を
同時実行コントロール待機状態のままにすることができます。 関連するSQL文の数がccl_max_waiting_countパラメーターの値を超えると、ERROR 7534 (HY000): "Concurrency control waiting count exceeds max waiting count" エラーが返されます。 ccl_max_waiting_countパラメーターは、異なるデータベースエンジンバージョンを実行するRDSインスタンスでは使用できない場合があります。ccl_max_waiting_countパラメーターがデフォルト値0に設定されている場合、すべてのスロットリングされたSQL文は
同時実行制御待機状態になり、エラーは返されません。 DASを使用してSQLスロットリングを実装し、ccl_max_waiting_countパラメーターを0に設定すると、DASはパラメーターの値をデフォルト値の10に変更します。 パラメーターを0より大きい値に設定した場合、DASは指定した値を使用してSQLスロットリングを実装します。
手順
[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。
次のいずれかの方法を使用して、自律機能管理パネルに移動します。
左側のナビゲーションウィンドウで、自律型サービス (CloudDBA) > ワンクリック診断 を選択します。 表示されるページで、自律型センター タブをクリックします。 自律型センター タブで、自律機能設定 をクリックします。
左側のナビゲーションウィンドウで、自律型サービス (CloudDBA) > パフォーマンスの傾向 を選択します。 表示されるページの パフォーマンスのトレンド タブで、Autonomy Service Settings をクリックします。
自律機能管理 パネルの Autonomous Function Settings タブで、自律サービスを有効にします。 最適化とスロットリング タブで、自動スロットリング を選択し、次のパラメーターを設定して、自動スロットリングをトリガーする条件を指定します。
このパラメーターがCPU使用率パラメーターとのOR関係を使用する場合は、このパラメーターに16以上の値を指定します。
このパラメーターがCPU使用率パラメーターとのAND関係を使用する場合は、このパラメーターに2以上の値を指定します。
スロットリング後に問題が解決しない場合、システムは自動SQLスロットリング操作を自動的にロールバックします。
自動SQLスロットリングの期間は、指定された最大スロットリング期間を超えません。
OKをクリックします。
必要に応じて、 [アラート設定] セクションで、アラートテンプレートを設定し、アラート通知をサブスクライブします。 これにより、自動SQLスロットリングタスクのステータスをできるだけ早く把握することができます。
システムはアラートテンプレートを推奨し、アラートテンプレートに必要な自律性イベントのアラートルールを追加します。 プロンプトに従ってアラートテンプレートを設定できます。
説明RDSインスタンスにアラートテンプレートを設定した場合は、プロンプトに従って、必要な自律性イベントのアラートルールをアラートテンプレートに追加する必要があります。
RDSインスタンスにアラートテンプレートを設定せずに設定する場合は、「アラートテンプレートの設定」および「アラートルールの設定」の手順に従って、アラートテンプレートを設定できます。
[アラート送信先グループの選択] ステップで、[アラート送信先グループ] を選択します。
[連絡先の追加] をクリックしてアラート連絡先を追加します。
[連絡先グループの作成] をクリックして、アラート連絡先グループを作成します。
管理するアラート連絡先を見つけ、[操作] 列の [編集] または [削除] をクリックして、アラート連絡先に関する情報を変更または削除します。
詳細は、「アラート連絡先の管理」をご参照ください。
[リソースに関連付ける] ステップで、関連するリソースを確認します。
[設定の送信] をクリックします。 表示されるダイアログボックスで、設定を確認します。

パラメーター | 説明 |
CPU 使用率 > | CPU使用率のしきい値。 パラメーターを70以上の値に設定します。 |
アクティブセッション数 > | アクティブなセッション数のしきい値。 |
Available Time Range | 自動SQLスロットリングが実行される期間。 |
Maximum Throttling Duration | SQLスロットリングの最大期間。 Maximum Throttling Durationパラメーターを0に設定した場合、データベースインスタンスが指定した条件を満たすと、自動SQLスロットリングがトリガーされます。 ただし、自動SQLスロットリングはすぐに無効になります。 |
期間 > | 期間のしきい値。 CPU使用率およびアクティブセッション数パラメーターの値が指定された条件を満たす期間がこのパラメーターの値を超えると、自動SQLスロットリングがトリガーされます。 |
たとえば、次の条件を指定できます。CPU使用率が80% を超え、アクティブなセッションの数が64を超え、異常状態が2分を超えた場合。 指定されたスロットリングウィンドウ内でこれらの条件が満たされると、自動SQLスロットリングがトリガーされ、システムはRDSインスタンスのパフォーマンスの監視を開始します。
自動SQLスロットリングの履歴を表示する
[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。
左側のナビゲーションウィンドウで、自律型サービス (CloudDBA)>ワンクリック診断を選択します。
セッション管理タブをクリックします。
インスタンスのセッション セクションで、SQL スロットリング をクリックします。 表示されるダイアログボックスで、ビジネス要件に基づいて次の操作を実行します。

[実行] タブをクリックして、実行中のスロットリングルールを表示します。
[完了] タブをクリックし、時間範囲を選択して、指定した時間範囲内のスロットル履歴を表示します。

自動SQLスロットリングのパラメーターを設定するときに、実行中の異常な SQL 文を強制終了 を選択した場合、セッション履歴の終了 をクリックして終了したセッションを表示できます。
関連ドキュメント
SQL文を最適化して、データベースのパフォーマンスを向上させ、クエリ効率を向上させ、リソース消費を削減できます。 詳細については、次のドキュメントをご参照ください。
RDSインスタンスのメトリックが指定されたしきい値に達しておらず、自動SQLスロットリングをトリガーできない場合は、SQL文をスロットルするルールを手動で設定できます。 詳細については、「SQLスロットリング」をご参照ください。
関連する API 操作
操作 | 説明 |
一度に複数のデータベースインスタンスの自動SQLスロットリングのパラメーターを非同期的に指定します。 | |
データベースインスタンスの自動SQLスロットリングルールを照会します。 | |
複数のデータベースインスタンスの自動SQLスロットリング機能を同時に無効にします。 |