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

:自動 SQL スロットリング

最終更新日:Nov 20, 2024

予期しないトラフィックの急増によりSQL文の同時実行数が大幅に増加した場合、一部のSQL文が大量のデータベースリソースを消費した場合、またはインデックスのないSQL文が大量に実行された場合、SQL文の同時実行を制限してビジネスの安定性を確保する必要があります。 Database Autonomy Service (DAS) は、自動 SQL スロットリング機能を提供します。 この機能は、SQLステートメントの特性を自動的に抽出し、問題のあるSQLステートメントをキーワードでスロットルします。

前提条件

管理するデータベースインスタンスは、次の表に示すタイプのいずれかです。

データベースインスタンス

リージョン

  • ApsaraDB RDS for MySQL High-availability EditionまたはEnterprise Edition

    説明

    MySQL 5.5を実行するApsaraDB RDS for MySQLインスタンスはサポートされていません。

  • PolarDB for MySQLクラスタエディション

    説明

    1つのノードを持つPolarDB for MySQL Cluster Editionはサポートされていません。

  • ApsaraDB MyBase for MySQL高可用性エディション

自動SQLスロットリング機能は、異常検出機能に依存します。 自動SQLスロットリングは、異常検出機能をサポートするリージョンのデータベースインスタンスに対してのみ有効にできます。 次のリージョンがサポートされています。

中国 (杭州) 、中国 (上海) 、中国 (深セン) 、中国 (河源) 、中国 (広州) 、中国 (青島) 、中国 (北京) 、中国 (張家口) 、中国 (フフホト) 、中国 (ウラン州) 、中国 (南京-地方地域) 、中国 (福州-地方地域) 、中国 (成都) 、中国 (鄭州-地方地域) 、中国 (香港) 、日本 (東京) 、韓国 (ソウル) 、シンガポール (クアラルンプール) 、インドネシア (ジャカルタ) 、フィリピン (マニラ) 、タイ (バンコク) 、アラブ首長国連邦 (ドバイ) 、SAU (リヤド-パートナー地域) 、ドイツ (フランクフルト) 、米国 (シリコンバレー) 、米国 (バージニア) 、英国 (ロンドン)

シナリオ

自動SQLスロットリング機能は、次のシナリオに適用できます。

  • トラフィック: キャッシュ侵入例外または疑わしい要求により、特定のタイプの同時SQLクエリが急増します。

  • データ: 多数のSQLクエリが同じソースから送信されます。 例えば、オンライン・ショッピング・プラットフォームのユーザは、多数の注文を出す。 この場合、ユーザーアカウントに関連する多数のSQLクエリが送信されます。 SQLクエリは、データベースインスタンス内の大量のデータベースリソースを消費します。

  • SQL文: インデックスを使用しない多数のSQL文が実行されます。 これはデータベースのパフォーマンスに影響します。

制限事項

自動SQLスロットリングのスロットリングモードは、Throttled by Keywordsです。

  • SELECTUPDATEDELETEINSERTのSQL文を調整できます。

  • INSERT...SELECT... 型のSQL文はスロットルできません。

  • MySQL 8.0を実行するApsaraDB RDS for MySQLインスタンスと、MySQL 5.7または8.0を実行するPolarDB for MySQLクラスターのみが、INSERTタイプのSQL文をスロットルできます。

機能の説明

データベースインスタンスの自動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文は同時実行コントロール待機状態になります。 データベースインスタンスのバージョンがこのパラメーターをサポートしている場合、Concurrencyコントロール待機状態のSQL文の数がccl_max_waiting_countパラメーターで指定されたしきい値を超えると、対応するデータベースシステムは次のいずれかのエラーコードを返します。

    • 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はこのパラメーターの値をDASで定義されている既定値である10に変更します。 ccl_max_waiting_countパラメーターを0より大きい値に設定した場合、DASは指定した値を使用してSQLスロットリングを実装します。

自動SQLスロットリングの詳細については、「自動SQLスロットリング」をご参照ください。

手順

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

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

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

  4. インスタンスの詳細ページで、自律型センター左側のナビゲーションウィンドウに表示されます。

  5. 自律型センターページで、Autonomy Service Settingsをクリックします。

    开关设置

  6. パネルの Autonomous Function Settings タブで、自律サービスを有効にします。 最適化とスロットリング タブで、自動スロットリング を選択し、次の表に示すパラメーターを設定して、自動SQLスロットリングをトリガーする条件を指定します。

    2

    パラメーター

    説明

    CPU 使用率 >

    CPU使用率のしきい値。 パラメーターを70以上の値に設定します。

    アクティブセッション数 >

    アクティブなセッション数のしきい値。

    • CPU使用率のしきい値とアクティブなセッション数のしきい値をor演算子で評価する場合は、16以上の整数を指定してください。

    • CPU使用率のしきい値とアクティブなセッション数のしきい値をand演算子で評価する場合は、2以上の整数を指定してください。

    Available Time Range

    自動SQLスロットリングが実行される期間。

    Maximum Throttling Duration

    SQLスロットリングの最大期間。

    Maximum Throttling Durationパラメーターを0に設定した場合、データベースインスタンスが指定した条件を満たすと、自動SQLスロットリングがトリガーされます。 ただし、自動SQLスロットリングはすぐに無効になります。

    期間 >

    CPU使用率とアクティブセッション数が指定された条件を満たす期間のしきい値。 指定されたしきい値を超えると、自動SQLスロットリングがトリガーされます。

    説明

    たとえば、次の条件を指定できます。CPU使用率が80% を超え、アクティブなセッションの数が64を超え、異常状態が2分を超えた場合。 特定のスロットリングウィンドウ内でこれらの条件が満たされると、自動SQLスロットリングがトリガーされ、DASはデータベースインスタンスのパフォーマンスの監視を開始します。

    • 自動SQLスロットリングの実行後に問題が解決しない場合、DASは自動SQLスロットリング操作を自動的にロールバックします。

    • 自動SQLスロットリングの期間は、指定された最大スロットリング期間を超えません。

  7. OKをクリックします。

    インスタンスセッション ページで、データベースインスタンスのスロットルされたSQL文を表示できます。 詳細については、このトピックの「自動SQLスロットリングの履歴の表示」をご参照ください。

  8. オプション: 自動SQLスロットリングイベントの通知ルールを設定するには、自動関数管理パネルの Event Subscription Settings タブをクリックします。

    自動SQLスロットリングがトリガーされると、DASは警告イベントの通知を送信します。 通知を受け取るには、[サブスクリプションサービスの有効化] をオンにしてパラメーターを設定します。 詳細については、「イベントサブスクリプション」をご参照ください。

  9. [アラート設定] セクションで、アラートテンプレートを設定し、アラート通知をサブスクライブします。 これにより、自動SQLスロットリングタスクのステータスをできるだけ早く把握することができます。

    システムはアラートテンプレートを推奨し、アラートテンプレートに必要な自律性イベントのアラートルールを追加します。 プロンプトに従ってアラートテンプレートを設定できます。

    説明
    • データベースインスタンスにアラートテンプレートを設定した場合は、プロンプトに従って、必要な自律性イベントのアラートルールをアラートテンプレートに追加する必要があります。

    • データベースインスタンスのアラートテンプレートとアラートルールを設定する方法の詳細については、「アラートテンプレートの設定」および「アラートルールの設定」をご参照ください。

  10. [連絡先グループの選択] セクションで、アラート連絡先グループを選択します。

    • [連絡先の追加] をクリックしてアラート連絡先を追加します。

    • [連絡先グループの作成] をクリックして、アラート連絡先グループを作成します。

    • 管理するアラート連絡先を見つけ、[操作] 列の [編集] または [削除] をクリックして、アラート連絡先に関する情報を変更または削除します。

    詳細は、「アラート連絡先の管理」をご参照ください。

  11. [設定の送信] をクリックします。 表示されるダイアログボックスで、設定を確認します。

自動SQLスロットリングの履歴を表示する

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

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

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

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

  5. インスタンスのセッション[セッション管理] タブのセクションでは、ビジネス要件に基づいて操作を実行できます。

    ss

    • SQL スロットリング をクリックします。 [SQLスロットリング] ダイアログボックスでは、次の操作を実行できます。

      • [実行] タブをクリックして、トリガーされているスロットリングルールを表示します。

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

      SQL限流

    • 自動SQLスロットリングのパラメーターを設定するときに、実行中の異常な SQL 文を強制終了 を選択した場合、セッション履歴の終了 をクリックして終了したセッションを表示できます。

関連ドキュメント

  • SQL文を最適化して、データベースのパフォーマンスを向上させ、クエリ効率を向上させ、リソース消費を削減できます。

    • 自動SQL最適化の詳細については、「自動SQL最適化」をご参照ください。

    • 手動SQL最適化の詳細については、「SQL最適化」をご参照ください。

  • インスタンスのCPU使用率またはアクティブなセッション数が指定されたしきい値に達していないために自動SQLスロットリングをトリガーできないが、SQLスロットリングを有効にする場合は、SQL文をスロットルするルールを手動で設定できます。 詳細については、「SQLスロットリング」をご参照ください。

関連する API 操作

API 操作

説明

UpdateAutoThrottleRulesAsync

一度に複数のデータベースインスタンスの自動SQLスロットリングのパラメーターを非同期的に指定します。

GetAutoThrottleRules

データベースインスタンスの自動SQLスロットリングルールを照会します。

DisableAutoThrottleRules

複数のデータベースインスタンスの自動SQLスロットリング機能を同時に無効にします。