低速な SQL クエリは、データベースの安定性を著しく低下させます。 データベースで高負荷やパフォーマンスのジッターなどの問題が発生した場合、データベース管理者(DBA)または開発者は、まずスロークエリログが生成されているかどうかを確認します。Database Autonomy Service(DAS)は、低速クエリに対するログ分析機能を提供します。 DAS は、実行時間が指定されたしきい値を超える SQL 文の統計を収集して分析し、解決策を提供します。 データベースのパフォーマンスの問題を簡単にトラブルシューティングできます。 これにより、システムの信頼性と安定性が向上します。
前提条件
管理するデータベースインスタンスは、次のいずれかのタイプです。
ApsaraDB RDS for MySQL
自己管理型 MySQL データベース
ApsaraDB RDS for MySQL Basic Edition インスタンスはサポートされていません。
背景情報
スロークエリログは、データベースカーネルによって生成されます。 関連するパラメーターとしきい値は、データベースエンジンによって異なります。 詳細については、対応する公式ドキュメントをご参照ください。 ApsaraDB RDS for MySQL インスタンスの long_query_time パラメーターを変更して、スロークエリログを定義するために使用される時間のしきい値を指定できます。 詳細については、「インスタンスパラメーターの変更」をご参照ください。
手順
この例では、ApsaraDB RDS for MySQL インスタンスを使用します。
DAS コンソール にログインします。
左側のナビゲーションウィンドウで、[インテリジェント O&M センター] > [インスタンス監視] を選択します。
表示されるページで、管理するデータベースインスタンスを見つけ、インスタンス ID をクリックします。 インスタンスの詳細ページが表示されます。
左側のナビゲーションウィンドウで、リクエスト分析 > 低速クエリログ を選択します。
スロークエリログ分析 タブで、時間範囲を指定し、指定した時間範囲内の [スロークエリログのトレンド]、[イベント分布]、[スロークエリログ統計]、および [スロークエリログの詳細] を表示します。
説明時間範囲を指定する場合、終了時刻は開始時刻よりも後でなければならず、開始時刻と終了時刻の間隔は 24 時間を超えることはできません。 過去 1 か月以内のスロークエリログをクエリできます。
[スロークエリログのトレンド] セクションで、トレンドチャートの時刻をクリックして、その時刻のスロークエリログの統計と詳細を表示できます。
説明GUI の長さ制限により SQL 文の内容が完全には表示されない場合は、SQL 文の上にポインターを移動すると、完全な内容を表示できます。
をクリックして、スロークエリログをコンピューターにダウンロードできます。
をクリックして、選択して入力したパラメーターを API デバッグ用の OpenAPI コンソールに入力します。[イベント分布] セクションで、次の操作を実行します。
[スロークエリログ統計] タブで、次の操作を実行します。
リストの上部でフィルター条件を設定します。 データベースエンジンが異なると、フィルター条件も異なります。
管理する SQL テンプレートに対応する SQL ID をクリックして、ユーザー分布、クライアント分布、メトリ ックトレンドの相関関係と詳細リストを表示します。
SQL テンプレートに対応する 操作 列の 最適化 をクリックします。SQL 診断の最適化 ダイアログボックスで、SQL 診断結果を表示します。
SQL 最適化の提案を受け入れる場合は、右上隅にある コピー をクリックし、最適化された SQL 文をデータベースクライアントまたは Data Management(DMS)に貼り付けて実行します。 SQL 最適化の提案を受け入れない場合は、Cancel をクリックします。
説明DAS は、SQL 文の複雑さ、テーブル内のデータ量、およびデータベースの負荷に基づいて SQL 診断を実行します。 SQL 診断の実行後、20 秒以上経過してから提案が返される場合があります。 診断が完了すると、SQL 診断エンジンは、診断結果、最適化の提案、および予想される最適化のメリットを提供します。 診断結果に基づいて、提案を受け入れるかどうかを判断できます。
管理する SQL テンプレートを見つけ、操作 列の スロットリングを実行してください。 をクリックします。SQL スロットリング ダイアログボックスで、パラメーターを設定します。 詳細については、「SQL スロットリング」をご参照ください。
PolarDB for MySQL クラスタの場合、管理する SQL テンプレートを見つけ、操作 列の [IMCI] をクリックして、インメモリ列インデックス(IMCI)機能のドキュメントを表示します。
説明PolarDB for MySQL クラスタ用に IMCI ノードが購入されていない場合、SQL テンプレートの最大実行時間が 20 秒を超えている場合、および SQL テンプレートの最大スキャン行数が 200,000 を超えている場合、[IMCI] ボタンが [アクション] 列に表示されます。
大量のデータに対して複雑なクエリが必要な場合は、IMCI 機能を使用してクエリのパフォーマンスを向上させることをお勧めします。
[スロークエリログの詳細] タブで、管理する SQL 文を見つけ、操作 列の 最適化 または スロットリングを実行してください。 をクリックして、SQL 診断の最適化または SQL スロットリングを実行します。
よくある質問
Q:スロークエリログに記録されている SQL 文の実行完了時刻が、SQL 文の実際の実行完了時刻と異なるのはなぜですか?
A:この問題は通常、スロークエリログに記録されているタイムゾーンが、実行された SQL 文によって変更された場合に発生します。 SQL 文の実行完了時刻は、セッションレベル、データベースレベル、およびシステムレベルでスロークエリログに記録されているタイムゾーンによって異なります。 データベースにタイムゾーンが指定されている場合、SQL 文の実行完了時刻は、データベースのタイムゾーンに基づいて記録されます。 それ以外の場合、SQL 文の実行完了時刻は、システムのタイムゾーンに基づいて記録されます。 SQL 文がセッションレベルでタイムゾーンを変更する場合、スロークエリログに記録されているタイムゾーンが正しく変換されない場合があります。
関連情報
DAS の自律機能を有効にすることができます。 これにより、データベースインスタンスで低速な SQL クエリが検出されると、DAS は低速な SQL クエリを自動的に最適化します。