
新しいGrafana Assistant連携でデータベースのパフォーマンス問題をより迅速に解決
データベースの動作が重い。さて、どうする?
Grafana CloudのDatabase Observabilityは、REDメトリクス、個々の実行サンプル、ウェイトイベントの内訳、テーブルスキーマ、視覚的な実行計画によって、すでにSQLクエリの十分な可視性を提供しています。しかし、可視化はスタート地点にすぎません。
クエリのP99レイテンシー(遅延)が急上昇しているのは確認できても、それに対して具体的にどのような手を打つべきでしょうか?wait/synch/mutex/innodbのようなウェイトイベントが発生しているのは見えても、具体的にどこにボトルネックがあり、どう対処すべきかまで瞬時に判断できるでしょうか?
幸いなことに、Database Observability向けに新しく統合されたGrafana Assistantを活用すれば、これらの答えをこれまで以上に簡単かつ迅速に見つけ出すことができます。クエリを調査するたびに、AIの強力なパワーとGrafana Cloudの深いオブザーバビリティ機能を組み合わせて利用できるようになります。
最大のメリットは、コンテキストの準備やスキーマの説明、時間範囲の指定といった事前作業が一切不要な点です。一般的なAIツールのように、SQLをわざわざ別画面にコピー&ペーストして動作させるわけではありません。そうではなく、今まさに確認している時間軸のまま、PrometheusやLokiの実データソースに対して直接クエリを実行。本番環境のリアルなテーブルスキーマやインデックス、実行計画を最初から把握した状態でアシストしてくれます。
この機能には、汎用的なプロンプトではなく、データベースエンジニアによって設計された目的別の分析アクションがそれぞれの調査画面にあらかじめ組み込まれています。すべての分析はデータベースの実データに基づいており、具体的なアドバイスを提供します。なお、クエリテキストやスキーマのメタデータは現在の分析にのみ使用され、保存されたりモデルのトレーニングに利用されたりすることはありません。
一般的なデータベースの課題に対処するプロンプト
この連携がどれほど効果的であるかを示すために、アシスタントが一般的な問題を迅速に解決するいくつかの具体例を見ていきましょう。
もちろん、通常通りアシスタントのチャットボックスに直接自由なプロンプトを入力することも可能ですが、動作の遅いクエリや劣化したクエリへの対処、あるいは変更に関する推奨事項の取得をガイド付きでスムーズに行えるよう、あらかじめ最適なAIボタンを標準で用意しています。
このクエリはなぜ遅いのか?
原因となっているクエリを特定したとします。概要画面では処理時間が急上昇し、エラー率も上がっています。クエリをクリックすると、特定の時系列(タイムシリーズ)のパフォーマンスデータが表示されます。
データはすべて揃っていますが、原因の診断は容易ではありません。不適切なJOINやロックの競合が原因でしょうか?それとも、データ量が増えるまでは問題にならなかったテーブルスキャンが原因でしょうか?
ボタンを1回クリックするだけで、定義済みのプロンプトに沿ってアシスタントが起動します。
アシスタントは即座に動作を開始し、LokiとPrometheusの両方を使用して選択された時間ウィンドウをクエリし、それらを単一のヘルスアセスメントへと統合します。「行の調査数が結果として返された行数の50倍に達しているため、処理時間が急上昇しています。つまり、処理の大半がフィルタリングで無駄になっています。P99が中央値の12倍であるため、この問題は常時発生しているのではなく間欠的なものです。CPU時間は健全ですが、ウェイトイベントが実行時間の40%を占めています」といった具合です。
この最後のポイントは極めて重要です。ウェイトイベントにはwait/synch/mutex/innodbやio/table/sql/handlerといった名前がついています。これらの名称は一見して分かりやすいものではありませんが、アシスタントはそれらを的確に理解し、次のように教えてくれます。
「この待ち時間の間、要求された行がバッファプールに存在しないため、データベースはディスクから物理的にデータを読み込んでいます。これは、クエリが
ordersテーブルに対してシーケンシャルスキャンを実行しているために発生しています。このテーブルには120万行のデータがありますが、order_dateにインデックスが設定されていません」
実際のスキーマと実行計画を使用し、メトリクス(待ち時間40%)から原因(シーケンシャルスキャン、インデックスの欠落)、そして対象のテーブル(orders)とカラム(order_date)までを、わずか1つの回答で結びつけて提示してくれます。これにより、多くの時間を節約し、的外れな調査の迷路(ラビットホール)に迷い込むのを防ぐことができます。
以下のビデオでは、この実例のもう一つのケースをご覧いただけます。

具体的にどこを変更すべきか?
時には、何を質問すればよいのか分からないこともあるでしょう。そのような状況をサポートするため、アシスタントは以下のような項目を含む、具体的かつ検証可能なCREATE INDEX 文などのSQLを生成します。
- 正しい順番で並べられたカラム
- そのカラムの順序が、クエリの
WHERE句やJOIN条件においてなぜ重要であるかの説明 - 書き込みパフォーマンスとのトレードオフに関する注意点
これらの推奨事項は、データベースの方言に特化しています。PostgreSQLのクエリに対しては、フィルタリングされたサブセットに対する部分インデックスを提案し、MySQLにおける全く同じパターンに対しては、適切なキー長を持つプレフィックスインデックスを提案する、といった具合です。さらに、ドキュメントのリンクは汎用的なSQLリファレンスではなく、該当するベンダーの公式ドキュメントを直接指し示します。
注:推奨された変更内容は、本番環境へ適用する前にステージング環境でレビューすることを強くお勧めします。
インデックスの修正ではなくクエリの書き換えが最適な解決策である場合、アシスタントはデータベースがクエリを処理するステップごとの内訳(EXPLAIN計画)を分析し、最もコストを消費しているオペレーションを特定します。
例えば、ハッシュJOINであるべき箇所でネストされたループJOINが行われているケースや、複合インデックスによって排除できるソート処理、あるいはCTE(共通テーブル式)にした方が高速になるサブクエリなどを検出します。それぞれのボトルネックには修正策が提示され、各修正策には検証ステップ、すなわち計画が実際に変更されたかを確認するために後から実行できるEXPLAINコマンドが用意されています。
これらの推奨事項は、皆様のスキーマに基づいています。アシスタントは、テーブルにどのインデックスがすでに存在するか、どの外部キー関係が定義されているか(あるいは欠落しているか)、そしてデータベースの実行計画が現在そのインフラをどのように利用しているかを把握しています。すでにインデックスが適切に設計されている場合はその旨を伝え、存在しない問題をでっち上げるようなことはしません。

状況は悪化しているか?
クエリの中には、完全に壊れているわけではなく、徐々に劣化しているものもあります。今日のP50(中央値)の処理時間は問題なくても、先週に比べて20%遅くなっているようなケースです。単一のインシデントとして表面化しないため誰も気づきませんが、じわじわとパフォーマンスが低下していきます。
アシスタントは、個々の実行サンプルを分析してそのパターンを表面化させます。極端なケース同士を直接比較することも可能です。ある調査では、最も速い実行には12ミリ秒しかかからず200行を調査しただけだったのに対し、最も遅い実行には3.4秒かかり、180,000行を調査していました。同じクエリ、同じスキーマであるにもかかわらず、280倍もの時間がかかっていたのです。
アシスタントは、高速な実行と低速な実行の違い(調査された行数、ウェイトイベントの内訳、タイミング)をハイライトします。そこから、考えられる原因を特定します。
例えば、より大きなデータパーティションにヒットするパラメータ値、負荷がかかったときにだけ現れるロックの競合、あるいは古い統計情報によって引き起こされた実行計画の変化などを特定できます。結果として、クエリテキスト単体からの推測ではなく、事実データに基づいた完全な診断が得られます。

チーム全員のコンテキストを1つの場所に集約
アシスタントは、チーム全体の生産性を高める配置にも優れています。すべての会話をチームメンバーと共有できるため、開発者はインデックスの変更を適用する前にアシスタントの分析結果をDBA(データベース管理者)に送ってレビューを依頼したり、プルリクエストやインシデントチケットに裏付けの証拠として添付したりできます。
そして、必要なときにいつでもそこにあります。任意のタブにあるボタンをクリックするだけで、稼働中のメトリクスに裏付けられた診断と、スキーマに最適化された修正策を手に入れ、その会話をチームメンバーと簡単に共有できます。
今日からはじめよう
AI Assistantは現在、Grafana CloudのDatabase Observabilityで一般提供(GA)されています。プレビューフェーズで以前のAI Helperを利用されていた皆様には、この新しいアシスタントの統合がより包括的なものになっていることを実感していただけるはずです。クエリの支援にとどまらず、新しいアシスタントは実行計画やテーブルスキーマの理解を助け、継続的な会話やチーム内での会話の共有もサポートします。
開始するには、クエリの詳細ビューに移動し、クエリパフォーマンス、クエリサンプル、ウェイトイベント、テーブルスキーマ、または実行計画(EXPLAIN計画)の各タブにあるアシスタントボタンを探してください。

セットアップ手順とサポートされているデータベースについては、Database Observabilityのドキュメントをご確認ください。
Grafana Cloudは、メトリクス、ログ、トレース、ダッシュボードなどを始める最も簡単な方法です。私たちは、充実した永久無料枠と、あらゆるユースケース向けのプランを用意しています。今すぐ無料でアカウントを作成しましょう!