低速 SQL クエリは、データベースの安定性を大幅に低下させます。データベースで高いワークロードやパフォーマンスのジッターなどの問題が発生した場合、データベース管理者 (DBA) または開発者は、まずスロークエリログが生成されているかどうかを確認します。Database Autonomy Service (DAS) は、スロークエリログ分析機能を提供します。DAS は、実行時間が指定されたしきい値を超えた SQL 文の統計を収集して分析し、ソリューションを提供します。これにより、データベースのパフォーマンス問題を簡単にトラブルシューティングできます。これにより、システムの信頼性と安定性が向上します。
使用上の注意
スロークエリログの最大長は 16 KB です。この長さを超えるコンテンツは切り捨てられます。
制限
RDS for MySQL Basic Edition インスタンスは、スロークエリログの表示とエクスポートをサポートしますが、SQL 診断および最適化機能はサポートしません。
低速 SQL 文ページへのアクセス
[インスタンス] ページに移動します。上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。
左側のナビゲーションウィンドウで、自律型サービス 低速 SQL を選択します。
説明RAM ユーザーとしてスロークエリログ分析機能を使用する場合は、RAM ユーザーに
AliyunHDMFullAccess権限が付与されていることを確認してください。スロークエリログ分析 タブで、時間範囲を指定し、指定した時間範囲内の [スロークエリログの傾向]、[イベント分布]、[スロークエリログの統計]、および [スロークエリログの詳細] を表示します。
説明時間範囲を指定する場合、終了時刻は開始時刻より後である必要があり、開始時刻と終了時刻の間隔は 24 時間を超えることはできません。過去 1 か月以内のスロークエリログを照会できます。
[スロークエリログの傾向] セクションで、傾向チャート内の時点をクリックして、その時点のスロークエリログの統計と詳細を表示できます。
説明GUI の長さ制限により SQL 文のコンテンツが完全に表示されない場合は、ポインターを SQL 文の上に移動して完全なコンテンツを表示できます。
をクリックして、スロークエリログをコンピューターにダウンロードできます。
をクリックして、選択および入力したパラメーターを OpenAPI コンソールに入力し、API デバッグを行うことができます。[イベント分布] セクションで、次の操作を実行します。
[スロークエリログの統計] タブで、次の操作を実行します。
リストの上部でフィルター条件を設定します。データベースエンジンによってフィルター条件は異なります。
管理したい 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 スロットリングを実行します。
追加情報
[スロークエリログ分析] 機能の主要なメトリックは次のとおりです。
スキャンされた最大行数: スロークエリログ統計のメトリックの 1 つです。このメトリックは、クエリ時間範囲内で低速クエリでスキャンされた行の最大数を示します。
SQL テンプレート: 同じタイプの SQL 文に対して生成される SQL テンプレートです。
低速 SQL サンプル: SQL テンプレートから定期的にサンプリングされるデータです。サンプル統計は、すべてのスロークエリログをカバーできるわけではありません。詳細については、「スロークエリログの詳細を表示する」をご参照ください。
スローログの詳細: 低速クエリの詳細です。スロークエリログ分析機能はデフォルトで有効になっています。実行時間が
long_query_timeパラメーターの値よりも長い SQL 文は、ApsaraDB RDS コンソールに表示されます。ApsaraDB RDS for MySQL では、log_queries_not_using_indexes パラメーターを有効にして、インデックスを使用しない SQL クエリを記録できます。詳細については、「MySQL の公式ドキュメント」をご参照ください。
よくある質問
Q: スロークエリログに記録された SQL 文の実行完了時刻が、SQL 文の実際の実行完了時刻と異なるのはなぜですか。
A: この問題は通常、実行された SQL 文によってスロークエリログに記録されたタイムゾーンが変更された場合に発生します。SQL 文の実行完了時刻は、セッションレベル、データベースレベル、システムレベルの次のレベルでスロークエリログに記録されたタイムゾーンによって異なります。データベースにタイムゾーンが指定されている場合、SQL 文の実行完了時刻はデータベースのタイムゾーンに基づいて記録されます。それ以外の場合、SQL 文の実行完了時刻はシステムのタイムゾーンに基づいて記録されます。SQL 文がセッションレベルでタイムゾーンを変更した場合、スロークエリログに記録されたタイムゾーンが正しく変換されないことがあります。
関連ドキュメント
DAS の自律機能を有効にすることができます。これにより、データベースインスタンスで低速 SQL クエリが検出されると、DAS は自動的に低速 SQL クエリを最適化します。