このトピックでは、Database Autonomy Service (DAS) のグローバルスローログ分析機能の使用方法について説明します。ユーザーグループを作成・管理することで、複数のデータベースインスタンスを一元的に監視・分析できます。この機能は、低速な SQL ステートメントを効率的に検出し、診断し、管理するのに役立ちます。これにより、データベースの高負荷やパフォーマンスの変動といった問題を解決し、コアビジネスの安定性を確保できます。
主要概念:ユーザーグループ
ユーザーグループは、スローログ分析機能の主要なコンポーネントです。ユーザーグループは、カスタムのインスタンス監視ダッシュボードとして機能します。ユーザーグループを作成して、次の操作を実行できます。
論理的なグループ化:異なる事業部門のデータベースインスタンスをグループ化して、管理しやすくします。各ユーザーグループには最大 10 個のインスタンスを含めることができます。
統一ビュー:グループ内のすべてのインスタンスのスローログの傾向、イベント分布、SQL 統計を単一のページで表示します。
効率的な切り替え:インスタンスを繰り返し選択することなく、異なるビジネスのフォーカスエリアをすばやく切り替えることができます。
DAS は、Top Slow Log Group という名前のデフォルトのシステムグループを作成します。毎時、DAS は、過去 24 時間においてお客様のアカウント配下で最も重要な異常アクティビティと最多の低速クエリログが記録された上位 5 つのインスタンスを自動的に選択します。これらのインスタンスがグループに追加されることで、お客様は重大な問題を迅速に特定して解決できます。
前提条件
対応データベースエンジン:データベースインスタンスは、次のいずれかのエンジンタイプを使用している必要があります。
リレーショナルデータベース:
RDS for MySQL、PolarDB for MySQL、MyBase for MySQL
RDS for SQL Server、MyBase for SQL Server
RDS for PostgreSQL、PolarDB for PostgreSQL、PolarDB for PostgreSQL (Oracle互換)
PolarDB-X 2.0
NoSQLデータベース:
Tair (Redis OSS 互換)、MyBase for Redis
ApsaraDB for MongoDB
インスタンスへのアクセス:対象のデータベースインスタンスが DAS に接続されている必要があります。詳細については、「データベースインスタンスへの接続」をご参照ください。
対応リージョン:
スロークエリログ詳細:この機能はすべてのリージョンで対応しています。
リアルタイムスロークエリログ統計:この機能は、中国本土、香港 (中国)、シンガポール、マレーシア (クアラルンプール)、インドネシア (ジャカルタ)、日本 (東京)、ドイツ (フランクフルト)、イギリス (ロンドン)、アメリカ (シリコンバレー)、およびアメリカ (バージニア) の各リージョンで対応しています。
セルフマネージドデータベース:スローログ分析ページは、セルフマネージドデータベースインスタンスに対応していません。
スロークエリログのしきい値:データベースカーネルがスロークエリログの記録を制御します。DAS は分析を担当し、しきい値を設定しません。MySQL の
long_query_timeパラメーターなど、スロークエリログのしきい値を設定するには、特定のデータベースインスタンスにログインする必要があります。
操作手順
グローバルスローログページへのアクセス
DAS コンソールにログインします。
ナビゲーションペインで、 を選択します。
オプション:右上の 古いバージョンに戻る をクリックして、旧バージョンのビューに切り替えます。詳細については、「スロークエリログ (旧バージョン)」をご参照ください。
ユーザーグループの管理と切り替え
ユーザーグループの切り替え:ページ左上のドロップダウンリストでユーザーグループを選択し、分析ビューを切り替えます。
新しいユーザーグループを追加 をクリックします。表示されたダイアログボックスで、ユーザーグループ名を入力し、確認 をクリックします。
ユーザーグループの管理:
グループの編集または削除:ユーザーグループパネルで、ユーザーグループ名の横にあるアクションアイコンをクリックして、グループの名前変更または削除を行います。
インスタンスの追加:対象のユーザーグループを選択した後、パネルの下にある さらにインスタンスを追加 をクリックします。表示されたダイアログボックスで、次の操作を行います。
選択可能なインスタンス リストでインスタンスをクリックし、現在のユーザーグループに追加します。
選択済みインスタンス リストでインスタンスをクリックし、現在のユーザーグループから削除します。
インスタンスの削除:現在のユーザーグループのインスタンスリストで、インスタンスカードの [×] アイコンをクリックしてインスタンスを削除します。
インスタンスの非表示:現在のユーザーグループのインスタンスリストで、インスタンスカードの
アイコンをクリックすると、そのインスタンスがビューに表示されなくなります。インスタンスのスロークエリログ情報 (傾向、イベント、スロークエリログリストなど) は表示されなくなります。アイコンをもう一度クリックすると、インスタンスが再表示され、その情報が復元されます。ユーザーグループを名前を付けて保存:別名で保存 をクリックし、現在のグループのインスタンス設定に基づいて新しいユーザーグループを作成します。
インスタンスの権限:青色でハイライト表示されたインスタンスカードは、そのインスタンスに対する権限があることを示します。権限のないインスタンスは黄色でハイライト表示され、ID のみが表示され、具体的なデータは表示できません。カスタムユーザーグループを作成して権限のないインスタンスを除外することで、アクセス可能なインスタンスのみがグループに含まれるようにできます。
傾向とイベントの分析
[ログのトレンドが遅い]:時間範囲を選択すると、上部の傾向グラフに現在のユーザーグループ内のすべてのインスタンスのスロークエリログの総数と傾向が表示されます。これにより、パフォーマンスの変動が発生した時期をすばやく特定できます。
[イベント配信]:傾向グラフの下には、指定した時間範囲内に発生した主要なデータベースイベントが表示されます。これらのイベントには、以下が含まれます。
[最適化イベント]:SQL 最適化分析が実行された、または最適化の提案が生成されたイベント。
[セキュリティイベント]:SQL 攻撃や設定の脆弱性など、中~高リスクのセキュリティイベント。
[スロットリング イベント]:SQL スロットリングまたは自動 SQL スロットリングアクションが発生したイベント。
[自動スケーリングイベント]:自動スケールアウトまたはスケールインアクションが発生したイベント。
低速 SQL ステートメントの特定と診断
ページ下部の スローログリスト は主要な分析エリアです。ここには、現在のユーザーグループ内にあるすべてのインスタンスのスロークエリログ情報が集約されます。
グローバル統計:デフォルトでは、リストにすべての低速 SQL ステートメントが集約され、各ステートメントの実行回数、最大実行時間、最大ロック待機時間、最大スキャン行数、最大返却行数、および最大 CPU 時間が表示されます。
インスタンスID/名前 の横にある
矢印をクリックすると、特定のインスタンスのスロークエリログを詳細に分析できます。インスタンスのスロークエリログ情報では、スロークエリログの傾向、イベント配信、スロークエリログの統計、および スロークエリログの詳細 を表示できます。
スロークエリログの傾向 グラフで、特定の時点を選択して、その時点の スロークエリログの統計 と スロークエリログの詳細 を表示できます。
説明低速な SQL ステートメントが長すぎて全文が表示されない場合は、ステートメントにマウスポインターを合わせると、ポップアップボックスに完全な SQL ステートメントが表示されます。
遅いログ統計 および 遅いログの詳細 タブでは、
をクリックしてスロークエリログ情報をコンピューターに保存できます。
をクリックすると、OpenAPI Explorer コンソールに移動できます。現在選択・入力されているパラメーターは、API のデバッグ用に自動的に引き継がれます。イベント配信 エリアでは、指定した時間範囲内のスローログイベントを照会できます。イベントをクリックすると詳細が表示されます。
スロークエリログの統計 エリアでは:
リストの上部で、フィルター条件を選択してデータを絞り込めます。利用可能なフィルター条件は、データベースエンジンによって異なります。
対象の [SQL ID] をクリックすると、相関関係や、ユーザー分布、クライアント分布、メトリクスの傾向を含む詳細なリストが表示されます。
対象の SQL テンプレートの 操作 列で、最適化 をクリックします。表示された SQL 診断の最適化 ダイアログボックスで、SQL 診断結果を確認します。
診断の提案を受け入れる場合は、ページ右上の コピー をクリックし、最適化された SQL ステートメントをデータベースクライアントまたは DMS に貼り付けて実行します。提案を受け入れない場合は、Cancel をクリックして診断を終了します。
説明DAS は、SQL ステートメントの複雑さ、対応するテーブルのデータ量、およびデータベースの負荷に基づいて SQL 診断を実行します。診断の提案が返されるまでに 20 秒以上かかる場合があります。診断が完了すると、診断エンジンは、診断結果、最適化の提案、および期待される最適化効果を提供します。診断結果に基づいて提案を受け入れるかどうかを決定できます。
対象の SQL テンプレートの 操作 列で、スロットリングを実行してください。 をクリックします。SQL スロットリング ページでスロットリングパラメーターを設定し、対象の SQL ステートメントにレート制限を適用します。詳細については、「SQLスロットリング」をご参照ください。
PolarDB for MySQL データベースインスタンスの場合、対象の SQL テンプレートの 操作 列で、[IMCI] をクリックすると、インメモリ列指向インデックス (IMCI) のドキュメントが表示されます。
説明[IMCI] ボタンは、PolarDB for MySQL データベースインスタンスにインメモリ列指向インデックスノードがなく、かつスロークエリログの 最大実行時間 が 20 秒を超え、スキャンされた最大行数 が 200,000 を超える場合に表示されます。
大量のデータを含む複雑なクエリでは、インメモリ列指向インデックス (IMCI) を使用してクエリパフォーマンスを向上させることができます。
スロークエリログの詳細 エリアでも、対象の SQL ステートメントの 操作 列で 最適化 と スロットリングを実行してください。 をクリックし、SQL 診断の最適化 と SQL スロットリング を実行できます。
よくある質問
Q:なぜスロークエリログのデータが表示されないのですか。
A:リアルタイムコンピューティングとウィンドウ集約技術が使用されているため、最新のスロークエリログ統計の表示に約 3 分の遅延が生じることが原因として考えられます。次の点も確認してください。
データベースインスタンスでスロークエリログ機能が有効になっており、しきい値が適切な値に設定されていることを確認してください。
選択した時間範囲内にスロークエリログが生成されていることを確認してください。
セルフマネージド MySQL データベースの場合、
mysql.slow_logテーブルのレコードが多すぎないことを確認してください。レコード数が多すぎると、dbgateway の収集がタイムアウトする原因となります。slow_logテーブルを切り捨てるか、dbgateway ホストモードを使用してローカルファイルからスロークエリログを収集してください。現在のアカウントに、対象インスタンスへの DAS アクセス権限があることを確認してください。
Q:RAM ユーザーがユーザーグループを表示または管理する権限を持っていない場合はどうすればよいですか。
A:管理者は RAM ユーザーにアカウントレベルのアクション権限を付与する必要があります。この承認は、グローバルスローロググループを操作する権限にのみ影響し、他のインスタンスに対する RAM ユーザーのデータ権限は変更しません。
グローバルグループ管理者ポリシー (例: DASGlobalGroupAdmin):このポリシーにより、ユーザーはグローバルグループの作成、削除、変更、および照会ができます。
{ "Version": "1", "Statement": [ { "Action": [ "hdm:DescribeGlobalGroups", "hdm:CreateGlobalGroup", "hdm:DeleteGlobalGroup", "hdm:ModifyGlobalGroup" ], "Resource": "*", "Effect": "Allow" } ] }グローバルグループ読み取り専用ポリシー (例: DASGlobalGroupReadOnly):このポリシーにより、ユーザーはグローバルグループの表示のみが許可されます。
{ "Version": "1", "Statement": [ { "Action": "hdm:DescribeGlobalGroups", "Resource": "*", "Effect": "Allow" } ] }
Q:一部のインスタンスが黄色でハイライトされ、現在のユーザーにアクセス権限がないことを示しているのはなぜですか。
A:黄色いハイライトは、RAM ユーザーがそのインスタンスに対するデータアクセス権限を持っていないことを示します。この問題は、次のいずれかの方法で解決できます。
管理者に連絡する:管理者に連絡し、RAM ユーザーにインスタンスへのアクセス権限を付与するよう依頼します。
グローバルグループ権限を付与する:RAM ユーザーに DASGlobalGroupAdmin 権限を付与します。これにより、RAM ユーザーはユーザーグループを作成し、アクセス権を持つインスタンスのデータを一括で表示できるようになります。
Q:クエリが実際にデータを返しているにもかかわらず、スロークエリログの返却行数 (Rows_sent) が 0 になるのはなぜですか。
A:これは通常、アプリケーションがサーバーサイドカーソルモードを使用していることが原因です。カーソルモードでは、SQL ステートメントの実行は 2 つの段階に分かれます。
EXECUTE 段階:サーバーはクエリを実行して結果セットを生成しますが、データ行はすぐにはクライアントに送信しません。列定義などのメタデータのみを返します。
FETCH 段階:クライアントは
FETCHコマンドを使用してデータ行をバッチで取得します。
スロークエリログは、EXECUTE 段階の統計を記録します。この段階では、MySQL はデータをスキャンしていますが (そのため
Rows_examinedは 0 ではありません)、まだデータ行をクライアントに送信していません (データは後続の FETCH 段階で送信されます)。したがって、Rows_sentは 0 として記録されます。一般的なシナリオ:
Java/JDBC:接続 URL で
useCursorFetch=trueが有効になっており、PreparedStatement.setFetchSize()が 0 より大きい値またはInteger.MIN_VALUEに設定されています。Python:
MySQLdb.cursors.SSCursorまたはpymysql.cursors.SSCursorが使用されています。ORM フレームワーク:一部のオブジェクトリレーショナルマッピング (ORM) フレームワークは、大規模なデータセットのクエリを処理する際に、デフォルトでストリーミングクエリを使用することがあります。これはカーソルモードに基づいています。
これが原因であるかを確認するには、アプリケーションコードで
fetchSizeが設定されているか、ストリーミングカーソルが使用されているかを確認してください。データベースでSHOW GLOBAL STATUS LIKE 'Com_stmt_fetch';コマンドを実行し、FETCH リクエストを確認することもできます。Q:スロークエリログの完了時刻が、SQL ステートメントの実際の実行時刻と異なるのはなぜですか。
A:この問題は通常、SQL ステートメントの実行時にタイムゾーンが変更されたことが原因で発生します。スロークエリログに記録される SQL 実行時間のタイムゾーンは、セッション、データベース、またはシステムレベルのいずれかになります。スロークエリログの時刻を決定するロジックは次のとおりです。データベースにタイムゾーンが設定されている場合はデータベースのタイムゾーンが使用され、設定されていない場合はシステムのタイムゾーンが使用されます。SQL ステートメントによってセッションレベルのタイムゾーンが変更された場合、スロークエリログレコードのタイムゾーンが正しく変換されないことがあります。
Q:SQL ID とは何ですか。
A:同じタイプのスロークエリログの統計分析を容易にするため、DAS はスロークエリログからコメントを削除し、パラメーターを疑問符 (?) に置き換えてスロークエリログテンプレートを生成します。その後、DAS はテンプレートに対してハッシュ計算を実行し、32 文字の SQL ID を生成します。同じ SQL ID を持つレコードは、同じタイプのスロークエリログと見なされます。
Q:スロークエリログが切り捨てられるのはなぜですか。切り捨てられていないスロークエリログを取得するにはどうすればよいですか。
A:基盤となるストレージの制限により、単一のスロークエリログの最大長は 16 KB です。この制限を超えるコンテンツは切り捨てられます。この長さ制限は変更できず、切り捨てられていないスロークエリログは取得できません。完全な SQL ステートメントを表示するには、監査ログ機能を有効にしてください。
Q:API から返されるスロークエリログデータが、コンソールのデータと一致しないのはなぜですか。
A:これは、次の 2 つの理由のいずれかが原因であると考えられます。
データベースエンジンが提供するスロークエリログ API を使用している。コンソールのデータと一致させるには、DAS が提供するスロークエリログ API (DescribeSlowLogStatistic) を使用してください。API を使用する最も簡単な方法は、コンソールで対象のデータを絞り込んだ後、[デバッグに進む] をクリックして、API でページデータを取得する方法を確認することです。
現在時刻に近いスロークエリログを照会すると、データの到着が遅れ、同じ API への 2 回のクエリで結果が一致しないことがあります。
関連ドキュメント
DAS の自動データベース管理機能を有効にすると、データベースインスタンスで低速な SQL ステートメントが発生した際に、自動的に最適化できます。