突然のトラフィックスパイク、リソースを大量に消費するクエリ、またはインデックスのないクエリが大量に発生してデータベースのパフォーマンスが脅かされる場合、その影響を制御する方法が必要です。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 はカスタム設定を使用します。 -
自動 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 スロットリングの履歴は インスタンスセッション ページで確認できます。詳細については、「スロットリング履歴の表示」をご参照ください。
-
(オプション) Event Subscription Settings タブをクリックして、自動 SQL スロットリングイベントの通知を設定します。
DAS が自動 SQL スロットリングをトリガーすると、警告 レベルのイベントが生成されます。通知を受け取るには、[サブスクリプションサービスを有効化] スイッチをオンにし、通知パラメーターを設定します。詳細については、「イベントサブスクリプションの有効化」をご参照ください。
-
アラートテンプレート を設定して通知をサブスクライブします。これにより、データベースインスタンスでの自動 SQL スロットリングイベントに関する通知を確実に受け取ることができます。
システムはテンプレートを推奨し、自律イベントに対応するアラートルールを追加します。プロンプトに従って設定を完了できます。
説明-
インスタンスにアラートテンプレートをすでに設定している場合は、プロンプトに従って必要なアラートルールを既存のテンプレートに追加してください。
-
アラートテンプレートとルールを手動で設定するには、「アラートテンプレートの設定」および「アラートルールの設定」をご参照ください。
-
-
アラート連絡先グループ を選択して通知を受け取ります。
-
連絡先の追加 をクリックして、新しいアラート連絡先を追加します。
-
新しいアラートグループを追加するには、連絡先グループの追加 をクリックします。
-
既存の連絡先を変更または削除するには、連絡先を見つけて [操作] 列の 変更 または [削除] をクリックします。
詳細については、「アラート連絡先の管理」をご参照ください。
-
-
設定の送信 をクリックし、表示されるダイアログボックスで設定を確認します。
スロットリング履歴の表示
DAS コンソールにログインします。
左側のナビゲーションウィンドウで、 をクリックします。
ターゲットインスタンスを見つけ、インスタンス ID をクリックしてインスタンス詳細ページを開きます。
-
左側のナビゲーションウィンドウで、インスタンスセッション をクリックします。
-
インスタンスのセッション ページで、次の手順を実行します。
-
SQL スロットリング をクリックします。
-
操作中 タブで、現在アクティブなスロットリングルールを表示します。
-
完了 タブで、時間範囲を選択して完了したスロットリングタスクの履歴を表示します。
履歴には、スロットリングモード、最大同時実行数、開始時刻、終了時刻、スロットリングルール、操作 の列が含まれます。[操作] 列の 有効化 をクリックして、完了したルールを再アクティブ化できます。
-
-
設定で 実行中の異常な SQL 文を強制終了 を選択した場合、セッション履歴の終了 をクリックして、終了したセッションのレコードを表示できます。
-
参考
-
SQL クエリを最適化して、データベースのパフォーマンスを向上させ、リソース消費を削減できます。
-
自動 SQL 最適化については、「自動 SQL 最適化」をご参照ください。
-
手動 SQL 最適化については、「SQL 最適化」をご参照ください。
-
-
CPU 使用率 または アクティブセッション数 が指定されたしきい値に達しない場合、DAS は自動スロットリングをトリガーしません。この場合、手動でルールを設定して SQL ステートメントをスロットリングできます。詳細については、「SQL スロットリング」をご参照ください。
API リファレンス
|
API |
説明 |
|
1 つ以上のデータベースインスタンスに対して、自動 SQL スロットリングパラメーターを非同期で設定します。 |
|
|
指定されたデータベースインスタンスの自動 SQL スロットリングルールを照会します。 |
|
|
1 つ以上の指定されたデータベースインスタンスの自動 SQL スロットリング機能を無効にします。 |