Database Autonomy Service (DAS) は、自動 SQL スロットリング機能を提供します。 自動 SQL スロットリングをトリガーする条件を設定できます。 条件が一致すると、自動 SQL スロットリングがトリガーされます。 このトピックでは、自動 SQL スロットリング機能を有効にする方法について説明します。

始める前に

  • 次のデータベースエンジンとエディションのいずれかを実行しているるデータベースインスタンスが使用されます。
    • ApsaraDB RDS High-availability Edition または Enterprise Edition の MySQL 5.6 、MySQL 5.7 、MySQL 8.0
    • PolarDB Cluster Edition の MySQL 5.6、MySQL 5.7、MySQL 8.0 と、PolarDB Archive Database Edition の MySQL 8.0
  • データベースインスタンスの [自律型サービスの有効化] のスイッチがオンになっている必要があります。 詳細については、「自律型センター」をご参照ください。
  • データベースインスタンスの [SQL Explorer] が有効になっている必要があります。 詳細については、「SQL Explorer」をご参照ください。
    低速 SQL の最適化が完了すると、全体的なパフォーマンスが低下する可能性があります。 [自動 SQL 最適化] 機能の精度を改善するには、[SQL Explorer] を有効化することを推奨します。

適用可能なシナリオとケースビデオ

自動 SQL スロットリング機能は、次のシナリオに適しています。
  • トラフィック: キャッシュの浸透または異常な呼び出しにより、特定のタイプの同時実行 SQL 文の実行数が急激に増加する可能性があります。
  • データ: 大規模な注文のあるアカウントからは多数の SQL 文が送信されます。 これらの SQL 文は、多数のデータベースリソースを使用します。
  • SQL 文: インデックスが作成されていないクエリテーブルには、多数の SQL 文が送信されます。 これによりデータベースのサービスに影響が生じます。

手順

  1. DAS コンソールにログインします。
  2. 左側のナビゲーションウィンドウで、[インスタンスモニター] をクリックします。
  3. 自動 SQL スロットリングを有効化するインスタンスのインスタンス ID をクリックします。 インスタンスの詳細ページが表示されます。
  4. 左側のナビゲーションウィンドウで、[自律型センター] をクリックします。
  5. [自律型センター] ページの右上隅で、[自律型サービスの設定] をクリックします。
    自律型サービスの設定
  6. [設定] ダイアログボックスで、[自律型サービスの有効化] スイッチをオンにします。
  7. [自動スロットリング] スイッチをオンにし、トリガー条件を指定するための以下のパラメーターを設定します。
    2
    パラメーター 説明
    CPU 使用率 70 % を超える比率です。
    アクティブセッション 16 より大きい整数です。
    期間 2 分を超える分数の値です。 最大スロットル期間を負の値にすることはできません。
    たとえば、自動 SQL スロットリングをトリガーする条件を、 CPU 使用率が 80 % を超える、 同時にアクティブなセッション数が 64 を超える、 異常な状況が続くと自動 SQL スロットリングがトリガーされるようにする期間が 2 分を超える、に指定したと仮定します。 指定されたスロットリング期間内で前述の条件が一致すると、自動 SQL スロットリングがトリガーされます。 インスタンスのパフォーマンスのモニタリングが開始されます。
    • 問題が解消されない場合、スロットリング操作がロールバックされます。
    • 自動 SQL スロットリングがトリガーされたあと、スロットリング期間が指定された最大スロットリング期間を超えることはありません。
    • [実行中の異常な SQL ステートメントを強制終了] を選択した場合、スロットリングの対象の異常な SQL 文も強制終了されます。 これにより、インスタンスのパフォーマンスを短期間で回復できます。
  8. [OK] をクリックします。
    自動 SQL スロットリングを有効化した後、アプリケーションから送信された SQL 文がすべてのトリガー条件に一致した場合、アプリケーションにエラー 1317 が返されます。 エラーメッセージは「query execution was interrupted」です。

シナリオ

  • 異常検出

    DAS は機械学習アルゴリズムを採用しています。これにより、データベースインスタンスの過去のパフォーマンスデータを使用してモデルをオフラインでトレーニングし、このモデルを使用してリアルタイムで例外を検出します。 しきい値ベースの検出と比較して、24/7 異常検出機能では、システムイベントによってアラートがトリガーされるとリアルタイムの通知が送信されます。

  • 根本原因の分析
    DAS は、データベースインスタンスの例外をサブスクライブし、例外が発生した場合にアクティブなセッションに関する情報を収集します。 SQL 監査の全量リクエスト分析の機能と performance_schema の統計を使用して、例外の根本原因を特定します。 一般的な原因は次の通りです。
    • SQL 文のブロック

      DAS は、セッション、ロック、実行中のトランザクションをリアルタイムで分析し、データ定義言語 (DDL) の変更、ロック待ち、大規模なトランザクションを引き起こす SQL 文を検出します。 また、SQL 文の影響を受けるセッションの数と SQL 文の実行時間もチェックされます。 SQL 文が多数のセッションに影響を与える場合、または長い実行時間を必要とする場合、DAS は SQL スロットリングの代わりにセッションを閉じます。

    • リソースを大量に使用する SQL 文

      このタイプの同時実行 SQL 文は、数は多くない場合がありますが、 これらは大量の CPU リソース、I/O リソース、ネットワークリソースを使用し、また、継続的に送信されます。

    • トラフィックの多い SQL 文

      これらの SQL 文は正常です。 ただし、これらの SQL 文が多数同時に実行されると、大量のデータベースリソースを使用します。 これによって、パフォーマンスのボトルネックや、Key-Value クエリへのレスポンスが遅くなるなどの例外が発生します。

    • その他の SQL 文

      上記の SQL 文を除いて、他の SQL 文もデータベースで例外を引き起こす可能性があります。

  • 自動スロットル

    DASがリソース集約型およびトラフィック集約型の SQL 文を検出すると、DASはこれらの SQL 文の機能を自動的に抽出します。 DASを承認すると、DASは、これらの機能を持つすべての SQL 文にスロットリングを自動的に実装します。

  • 特徴抽出
    SQLスロットリングは、SQLテンプレートまたは SQL 文に基づいて実装できます。 DASがスロットルを必要とする異常な SQL 文を検出するたびに、DASは正確なスロットルのために SQL 文の機能を抽出します。 これにより、不正確な特徴抽出によってビジネスが危険にさらされるのを防ぎます。 理想的なシナリオでは、抽出された特徴は一意であり、スロットリングは識別された異常な SQL 文にのみ実装されます。
    • SQLテンプレートベースのスロットリング

      SQLテンプレートは、パラメーターに特定の値がない SQL 文です。 特定の SQL テンプレートを使用する多数の SQL 文が同時に実行されると、パラメーター値に関係なく例外が発生する可能性があります。 したがって、実行する必要があるのは SQL テンプレートの機能の抽出のみです。 このタイプのスロットルは、複数のシナリオに適用されます。 たとえば、トラフィックスパイクが発生した場合や、インデックス未作成のクエリテーブルに多数の SQL 文が送信された場合に適用されます。

    • SQL 文ベースのスロットリング

      特定の SQL テンプレートを使用している一部の SQL 文が原因となり例外が発生している場合、SQL テンプレートおよび特定のパラメーター値を含む SQL 文から機能を抽出する必要があります。 このタイプのスロットリングは、データスキューが検出されるシナリオに適しています。

    SQL テンプレートベースのスロットリングでは、DAS は SQL 文から問題のあるテンプレート ID を抽出し、テンプレート ID を持つ文にスロットリングを実装します。 テンプレート ID は、データベースミドルウェアによって自動生成される SQL ID であるか、または開発者によって SQL テンプレートに追加される SQL ヒントである場合があります。 これにより高精度なスロットリングが簡単にでき、また、他のテンプレートを使用する SQL 文に影響が出ないことを保証できます。 ただし、コマンドラインで送信されたものなど、テンプレート ID を含まない同一の SQL 文は、スロットリング操作の影響を受けません。 これらの文は引き続き実行できます。

    SQL 文にテンプレート ID が含まれていない場合は、SQL 文から機能を抽出する必要があります。 SQL テンプレートは、分析プロセス中の計算に基づいて生成されます。 次の例では、SQL テンプレート 1 は SQL テンプレート 1 に基づいて生成され、SQL テンプレート 2 は SQL テンプレート 2 に基づいて生成されます。 SQL テンプレート 1 を SQL スロットリングに使用すると仮定します。 SQL テンプレート 1 の機能は、select id, name, age from students where name です。 これらの機能がスロットリングに使用される場合、送信方法に関係なく、これらの機能を持つ SQL 文にスロットリングが実装されます。 ただし、一部の SQL 文では予期しない方法でスロットリングが実装される場合があります。 たとえば、SQL テンプレート 2 には SQLテンプレート 1 のすべての機能があります。 したがって、DAS は、SQL テンプレート 1 に基づいて、SQL テンプレート 2 にスロットリングを実装します。 このタイプのスロットルは、要件を満たさない場合があります。

    /* SQL statement 1 */
    select id,name,age from students where name='Bob';
    /* SQL template 1 */
    select id,name,age from students where name = ?;
    /* SQL statement 2 */
    select id,name,age from students where name='Bob' and sid='Unique ID';
    /* SQL template 2 */
    select id,name,age from students where name=? and sid=?
  • 自動最適化

    DAS は、根本原因の分析中に最適化できる異常な SQL 文を検出すると、緊急応答としてスロットリングを実装し、SQL 文も最適化します。 DAS は、クエリを最適化するために、関連するテーブルのインデックスを自動的に作成します。

  • 追跡とロールバック

    DAS が自動 SQL スロットリングを開始すると、データベースのパフォーマンスの追跡を継続します。 データベースのワークロードが減少しない場合、またはトラフィックが想定どおりに減少しない場合、DAS はスロットリング操作をロールバックします。 その後、根本原因を再度特定します。