突然のトラフィックスパイク、リソースを大量に消費するクエリ、またはインデックスのないクエリが大量に発生し、データベースのパフォーマンスが脅かされる状況では、その影響を制御する手段が必要です。Database Autonomy Service (DAS) は、自動 SQL スロットリングを使用して安定性を維持します。この機能は、問題のある SQL パターンを特定し、キーワードに基づいて同時実行数を制限することで、コアサービスの可用性を維持します。
前提条件
この機能は、次のデータベースインスタンスで利用できます。
|
データベース |
リージョン |
|
自動 SQL スロットリング機能は異常検出機能に依存するため、異常検出をサポートするリージョンでのみ利用できます。サポートされているリージョンは次のとおりです。 中国 (杭州)、中国 (上海)、中国 (深圳)、中国 (河源)、中国 (広州)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (ウランチャブ)、中国 (南京 - ローカルリージョン) (提供終了予定)、中国 (福州 - ローカルリージョン) (提供終了予定)、中国 (成都)、中国 (鄭州)、中国 (香港)、日本 (東京)、韓国 (ソウル)、シンガポール、マレーシア (クアラルンプール)、インドネシア (ジャカルタ)、フィリピン (マニラ)、タイ (バンコク)、UAE (ドバイ)、サウジアラビア (リヤド)、ドイツ (フランクフルト)、米国 (シリコンバレー)、米国 (バージニア)、英国 (ロンドン) |
ユースケース
自動 SQL スロットリングは、次のシナリオに最適です。
-
ワークロードの急増:キャッシュペネトレーションやアプリケーションの例外的な動作といったイベントが原因で頻繁に発生する、特定の SQL クエリの同時実行数の急増。
-
リソースの競合:大量の注文データを持つアカウントなど、特定のアカウントに関連するクエリによる、データベースリソースの過剰な消費。
-
非効率なクエリ:適切なインデックスがない状態で大量のクエリが実行されることによる、ビジネス全体のパフォーマンス低下。
制限事項
自動 SQL スロットリングは、 キーワードによるスロットリング モードを使用し、次の制限事項があります。
-
サポートされている SQL ステートメントのタイプは、 SELECT、 UPDATE、 DELETE、 INSERT です。
-
INSERT...SELECT... 形式の SQL ステートメントはスロットリングできません。
-
ApsaraDB RDS for MySQL 8.0 インスタンスとPolarDB for MySQL 5.7 または 8.0 クラスターのみが、 INSERT ステートメントのスロットリングをサポートします。
仕組み
自動スロットリングルールを作成した後、アプリケーションがスロットリングルールに一致する SQL ステートメントを実行すると、データベースは次のように応答します。
-
ApsaraDB RDS for MySQL 5.6、 ApsaraDB RDS for MySQL 5.7 インスタンス、およびPolarDB for MySQL 5.6 クラスターは、1317 エラー (query execution was interrupted) を返します。
-
ApsaraDB RDS for MySQL 8.0 インスタンス、およびPolarDB for MySQL 5.7 またはPolarDB for MySQL 8.0 クラスターの場合、スロットリングされた SQL ステートメントは
Concurrency control waiting状態になります。インスタンスのバージョンで ccl_max_waiting_count パラメーターがサポートされている場合、待機中のステートメントの数がこのパラメーターの値を超えると、システムは "Concurrency control waiting count exceed 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 に設定されている場合、スロットリングされたすべての SQL ステートメントはConcurrency control waiting状態のままで、エラーは返されません。DAS でスロットリングを設定する場合、このパラメーターが 0 であれば、DAS は自動的にデフォルト値の 10 に設定します。パラメーターに 0 より大きい値を設定した場合、DAS はその設定値を使用します。 -
DAS がスロットリングルールを作成すると、問題のある SQL ステートメントの特性からキーワードを自動的に抽出します。これらの自動生成されたキーワードは、アプリケーションが実際に実行する SQL ステートメントの特性に対応しているため、スロットリングルールで直接使用できます。手動での調整は不要です。
キーワード抽出中にリテラルを保持するか削除するかは、SQL ステートメントにおけるリテラルのセマンティックコンテキストによって異なります。
-
リテラルが列値の比較条件として使用される場合 (例:
where id > 3)、リテラルはパラメーター化されて削除されます。キーワードは特定の値を保持しません。 -
リテラルがどの列にも関連付けられていないスタンドアロンの定数式として使用される場合 (例:
where 2 > 3)、リテラルはキー式として扱われ、保持されます。
自動 SQL スロットリングの技術的な詳細については、「自動 SQL スロットリング」をご参照ください。
手順
にログインします。DASコンソール.
左側のナビゲーションウィンドウで、インスタンスモニター.
表示されるページで、管理するデータベースインスタンスを見つけ、インスタンスIDをクリックします。 インスタンス詳細ページが表示されます。
インスタンスの詳細ページで、自律型センター左側のナビゲーションウィンドウに表示されます。
-
自律型センター ページで、右上の Autonomy Service Settings をクリックします。
-
自律機能管理 パネルで、 Autonomous Function Settings タブをクリックします。自律サービスのメインスイッチをオンにし、 最適化とスロットリング タブに移動して 自動スロットリング を選択し、次のトリガー条件を設定します。
パラメーター
説明
CPU 使用率 >
CPU 使用率のしきい値を指定します。値は 70% 以上である必要があります。
アクティブセッション数 >
アクティブセッション数のしきい値を指定します。
-
OR 演算子を使用する場合、値は 16 以上である必要があります。
-
AND 演算子を使用する場合、値は 2 以上である必要があります。
Available Time Range
自動 SQL スロットリングを実行できる期間。
Maximum Throttling Duration
単一の SQL スロットリングタスクの最大期間。
Maximum Throttling Duration を 0 に設定すると、条件が満たされたときにスロットリングがトリガーされますが、すぐに無効になります。
期間 >
自動 SQL スロットリングがトリガーされる前に、CPU 使用率とアクティブセッション数がしきい値を超過し続ける期間。
説明たとえば、利用可能な時間範囲内で次のトリガー条件を設定できます:CPU 使用率が 80% を超え、かつアクティブセッション数が 64 を超える状態が 2 分以上続いた場合、DAS は自動スロットリングをトリガーします。
-
スロットリング後に問題が解決しない場合、操作は自動的にロールバックされます。
-
スロットリング期間は、[最大スロットリング期間] に指定された値を超えません。
-
-
OK をクリックします。
自動 SQL スロットリングの履歴は インスタンスセッション ページで確認できます。詳細については、「自動 SQL スロットリング履歴の表示」をご参照ください。
-
(オプション) Event Subscription Settings タブをクリックして、自動 SQL スロットリングイベントの通知を設定します。
DAS が自動 SQL スロットリングをトリガーすると、 [警告] レベルのイベントが生成されます。通知を受信するには、 [サブスクリプションサービスを有効化] スイッチをオンにし、通知パラメーターを設定します。詳細については、「イベントサブスクリプションの有効化」をご参照ください。
-
アラートテンプレート を設定して通知を受け取るようにします。これにより、データベースインスタンスでの自動 SQL スロットリングイベントに関する通知を確実に受け取ることができます。
システムはテンプレートを推奨し、自律イベントに対応するアラートルールを追加します。プロンプトに従って設定を完了できます。
説明-
インスタンスにアラートテンプレートをすでに設定している場合は、プロンプトに従って、既存のテンプレートに必要なアラートルールを追加してください。
-
アラートテンプレートとルールを手動で設定するには、「アラートテンプレートの設定」および「アラートルールの設定」をご参照ください。
-
-
アラート連絡先グループ を選択します。
-
連絡先の追加 をクリックして、新しいアラート連絡先を追加します。
-
連絡先グループの追加 をクリックして、新しいアラート連絡先グループを追加します。
-
既存の連絡先を変更または削除するには、連絡先を見つけて変更 列の [変更] または [削除] をクリックします。
詳細については、「アラート連絡先の管理」をご参照ください。
-
-
設定の送信 をクリックし、表示されるダイアログボックスで設定を確認します。
スロットリング履歴の表示
にログインします。DASコンソール.
左側のナビゲーションウィンドウで、インスタンスモニター.
表示されるページで、管理するデータベースインスタンスを見つけ、インスタンスIDをクリックします。 インスタンス詳細ページが表示されます。
-
左側メニューで、 インスタンスセッション をクリックします。
-
インスタンスのセッション ページで、次の手順を実行します。
-
SQL スロットリング をクリックします。
-
操作中 タブで、現在アクティブなスロットリングルールを表示します。
-
完了 タブで、時間範囲を選択して完了したスロットリングタスクの履歴を表示します。
履歴には、 [スロットリングモード]、 [最大同時実行数]、 [開始時刻]、 [終了時刻]、 [スロットリングルール]、 [操作] の列が含まれます。 [操作] 列の [有効化] をクリックして、完了したルールを再度有効化できます。
-
-
設定で 実行中の異常な SQL 文を強制終了 を選択した場合、 セッション履歴の終了 をクリックして、終了したセッションの記録を表示できます。
-
関連情報
-
SQL クエリを最適化して、データベースのパフォーマンスを向上させ、リソース消費を削減できます。
-
自動 SQL 最適化の詳細については、「自動 SQL 最適化」をご参照ください。
-
手動 SQL 最適化の詳細については、「手動 SQL 最適化」をご参照ください。
-
-
[CPU 使用率] または [アクティブセッション数] が指定されたしきい値に達しない場合、DAS は自動スロットリングをトリガーしません。この場合、手動でルールを設定して SQL ステートメントをスロットリングできます。詳細については、「SQL スロットリング」をご参照ください。
API リファレンス
|
API |
説明 |
|
1 つ以上のデータベースインスタンスの自動 SQL スロットリングパラメーターを非同期に設定します。 |
|
|
指定された 1 つ以上のデータベースインスタンスの自動 SQL スロットリングルールを照会します。 |
|
|
指定された 1 つ以上のデータベースインスタンスの自動 SQL スロットリング機能を無効にします。 |