キャッシュペネトレーション、不審なトラフィック、または欠落しているインデックスが原因で同時 SQL 実行が急増すると、ご利用のデータベースインスタンスを保護するために自動 SQL スロットリングが作動します。Database Autonomy Service (DAS) は、パフォーマンスを監視し、異常を検出し、SQL の特性を自動的に抽出して、キーワードによって問題のあるステートメントをスロットルします。
前提条件
開始する前に、以下を確認してください。
サポートされているデータベースインスタンスタイプ:
ApsaraDB RDS for MySQL High-availability Edition または Enterprise Edition (MySQL 5.5 はサポートされていません)
PolarDB for MySQL Cluster Edition (シングルノードクラスターはサポートされていません)
ApsaraDB MyBase for MySQL High-availability Edition
異常検知機能をサポートするリージョンにあるデータベースインスタンス。サポートされているリージョン: 中国 (杭州)、中国 (上海)、中国 (深セン)、中国 (河源)、中国 (広州)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (ウランチャブ)、中国 (南京-ローカルリージョン)、中国 (福州-ローカルリージョン)、中国 (成都)、中国 (鄭州-ローカルリージョン)、中国 (香港)、日本 (東京)、韓国 (ソウル)、シンガポール、マレーシア (クアラルンプール)、インドネシア (ジャカルタ)、フィリピン (マニラ)、タイ (バンコク)、UAE (ドバイ)、サウジアラビア (リヤド - パートナー運営)、ドイツ (フランクフルト)、米国 (シリコンバレー)、米国 (バージニア)、およびイギリス (ロンドン)
ユースケース
| シナリオ | 説明 |
|---|---|
| トラフィックスパイク | キャッシュペネトレーションまたは不審なリクエストにより、特定のタイプの同時 SQL クエリが急増します。 |
| 単一ソースの過負荷 | 大量の SQL クエリが同じソースから発生します。たとえば、単一のユーザーが Eコマースプラットフォームで多数の注文を行う場合などです。 |
| 欠落しているインデックス | 大量の SQL ステートメントがインデックスなしで実行され、データベースパフォーマンスが低下します。 |
制限事項
自動 SQL スロットリングは、[キーワードによるスロットリング] モードのみを使用します。
スロットリング可能なステートメントタイプ:
SELECT、UPDATE、DELETE、およびINSERTINSERT...SELECT...ステートメントはスロットルできませんINSERTスロットリングは、MySQL 8.0 を実行する ApsaraDB RDS for MySQL および MySQL 5.7 または 8.0 を実行する PolarDB for MySQL クラスターでのみサポートされています
仕組み
スロットリングルールがアクティブで、アプリケーションが一致する SQL ステートメントを実行すると、MySQL バージョンに応じて、データベースはエラーを返すか、ステートメントを待機状態に保持します。
MySQL 5.6 および 5.7 (ApsaraDB RDS for MySQL) と MySQL 5.6 (PolarDB for MySQL)
データベースは、エラーコード 1317 とメッセージ query execution was interrupted を返します。
MySQL 8.0 (ApsaraDB RDS for MySQL) と MySQL 5.7 または 8.0 (PolarDB for MySQL)
一致したステートメントは Concurrency control waiting 状態に入ります。待機中のステートメント数が ccl_max_waiting_count しきい値を超えると、データベースは次のいずれかのエラーを返します。
| インスタンスタイプ | エラーコード |
|---|---|
| ApsaraDB RDS for MySQL 8.0 | ERROR 7534 (HY000) |
| PolarDB for MySQL 5.7 | ERROR 3277 (HY000) |
| PolarDB for MySQL 8.0 | ERROR 7533 (HY000) |
ccl_max_waiting_count について: デフォルト値は 0 であり、すべてのスロットルされたステートメントをエラーを返さずに待機状態に保ちます。DAS がスロットリングルールを適用し、ccl_max_waiting_count が 0 であることを検出すると、DAS は自動的にこれを 10 に設定します。これを 0 より大きい値に設定した場合、DAS はその値を使用します。
自動 SQL スロットリングの概念的な概要については、「自動 SQL スロットリング」をご参照ください。
自動 SQL スロットリングの有効化
DAS コンソールにログインします。
左側のナビゲーションウィンドウで、[インスタンス監視] をクリックします。
管理するデータベースインスタンスを見つけて、インスタンス ID をクリックし、インスタンス詳細ページを開きます。
左側のナビゲーションウィンドウで、[自律センター]をクリックします。
[自律センター] ページの右上隅にある [自律サービス設定] をクリックします。

[自律型機能管理] パネルの [自律型機能設定] タブで、自律サービスを有効にします。 次に、[最適化とスロットリング] タブに移動し、[自動スロットリング] を選択して、次のパラメーターを設定します。

| パラメーター | 説明 |
|---|---|
| [CPU 使用率 >] | CPU 使用率のしきい値。70 以上に設定します。 |
| [アクティブセッション数 >] | アクティブセッションのしきい値。CPU 使用率と OR 演算子を使用して組み合わせる場合は 16 以上に設定し、AND 演算子を使用する場合は 2 以上に設定します。 |
| [利用可能な時間範囲] | 自動スロットリングの実行が許可される時間範囲。 |
| [最大スロットリング持続時間] | 単一のスロットリングイベントの最大持続時間。0 に設定すると、スロットリングはトリガーされますが、すぐに無効になります。つまり、SQL ステートメントは実際にはスロットルされません。 |
| 期間 > | スロットリングがトリガーされる前に、CPU 使用率とアクティブセッションが継続的にしきい値を満たす必要がある時間。 |
たとえば、CPU 使用率を 80% 超、アクティブセッションを 64 超、持続時間を 2 分超に設定します。これらの条件が設定された時間範囲内で満たされると、DAS はスロットリングを開始し、インスタンスを監視します。スロットリング後も問題が続く場合、DAS はスロットリング操作を自動的にロールバックします。スロットリングの持続時間は、設定した最大スロットリング持続時間を超えることはありません。
「[OK]」をクリックします。速度制限が発生した後、「[インスタンスセッション]」ページで、有効な速度制限ルールと履歴を表示できます。詳細については、「速度制限の履歴を表示する」をご参照ください。
(省略可) [イベントサブスクリプション設定] タブをクリックして、自動 SQL スロットリングイベントの通知を設定します。自動 SQL スロットリングがトリガーされると、DAS から 警告 イベント通知が送信されます。 [サブスクリプションサービスを有効化] をオンにして、パラメーターを設定します。詳細については、「イベントサブスクリプション」をご参照ください。
[アラート設定]セクションで、アラートテンプレートを設定し、アラート通知をサブスクライブして、速度制限タスクのステータスをリアルタイムで追跡します。DAS はアラートテンプレートを推奨し、必要な自律イベントのアラートルールを自動的に追加します。プロンプトに従ってテンプレートを設定してください。
インスタンスにアラートテンプレートがすでに設定されている場合は、プロンプトに従って、必要な自律イベントのアラートルールを既存のテンプレートに追加します。詳細については、「アラートテンプレートの設定」と「アラートルールの設定」をご参照ください。
「[連絡先グループの選択]」セクションで、アラートグループを選択します。詳細については、「アラート連絡先の管理」をご参照ください。
[連絡先の追加] をクリックしてアラート連絡先を追加します。
新しいアラートグループを作成するには、[連絡先グループの作成] をクリックします。
既存の連絡先を編集または削除するには、操作列で[編集]または[削除]をクリックします。
[設定を送信] をクリックして、ダイアログボックスで設定を確認します。
スロットリング履歴の表示
DAS コンソールにログインします。
左側のナビゲーションウィンドウで、[インスタンス監視] をクリックします。
管理するデータベースインスタンスを見つけて、インスタンス ID をクリックし、インスタンス詳細ページを開きます。
左側のナビゲーションウィンドウで、インスタンスセッション をクリックします。
セッション管理タブの [インスタンスセッション] セクションで、該当の操作を実行します。

[SQL Throttling] をクリックして、SQL Throttling ダイアログボックスを開きます:
[実行中] タブ: 現在適用中の速度制限ルールを表示します。
完了 タブ: 過去の速度制限イベントを確認するための期間を選択します。

次のステップ
リソース消費を削減し、クエリ効率を向上させるために、SQL ステートメントを最適化します。
手動 SQL スロットリング: CPU 使用率またはアクティブセッションが自動スロットリングをトリガーするために必要な閾値に達しない場合は、ルールを手動で設定します。「SQL スロットリング」をご参照ください。
API リファレンス
| 操作 | 説明 |
|---|---|
| UpdateAutoThrottleRulesAsync | 複数のデータベースインスタンスの自動 SQL スロットリングパラメーターを一度に非同期で設定します。 |
| GetAutoThrottleRules | データベースインスタンスの自動 SQL スロットリングルールを照会します。 |
| DisableAutoThrottleRules | 複数のデータベースインスタンスの自動 SQL スロットリングを一度に無効にします。 |