Cloud Spanner 向けクエリプラン サンプルのご紹介: クエリ実行プランからパフォーマンス分析情報を取得する
Google Cloud Japan Team
※この投稿は米国時間 2023 年 5 月 3 日に、Google Cloud blog に投稿されたものの抄訳です。
Cloud Spanner は、ほぼ無制限のスケーリング、強整合性、業界をリードする最大 99.999% の高可用性を備えたフルマネージドのリレーショナル データベースです。また、Cloud Spanner は、GoogleSQL と PostgreSQL 両方の言語に対応しています。優れたトラブルシューティング手段を提供することは、Cloud Spanner の最も重視する領域の一つです。昨年、Google Cloud は Query Insights をリリースしました。Query Insights を使用することで、デベロッパーやデータベース管理者は、よく使うクエリや DML ステートメント クエリを(CPU 使用率で)迅速に特定して、これらのコストが高いクエリに関連する指標を観察することでクエリを詳細に分析できます。しかし、同じクエリのクエリ実行プランを比較したい場合はどうすればよいでしょうか?
このたび、クエリプラン サンプルのプレビューを提供することになりましたので、お知らせいたします。これは、デベロッパーやデータベース管理者がクエリ実行履歴からクエリ実行プランを可視化できるようにするパワフルなビジュアル ツールです。クエリプラン サンプルを使用すると、選択したクエリのサンプルで実行プランをすばやく可視化できるだけでなく、同じクエリのインスタンスごとの実行プランを簡単に比較、対比することもできます。また、ほどんどのデベロッパーが思いつく、次の問いかけに答えることができるようにもなります - なぜクエリのレイテンシは変動するのか?
Query Insights とのインテグレーション
Query Insights ダッシュボードは、ユーザーがコストが高いクエリを特定するのに役立ちます。ユーザーは、使用頻度が高い上位 N 個のクエリのフィンガープリントをクリックして [クエリの詳細] に移動することで、特定のクエリのパフォーマンスを詳細に確認できます。[クエリの詳細] ページに追加された新しいグラフがクエリプラン サンプルです。CPU 使用率の高いクエリがサンプリングされ、X 軸を時刻、Y 軸をこれらのサンプルのレイテンシとするグラフ上に、これらのサンプルがドットで表されます。ドットを選択すると、同じ画面内にそのサンプルのクエリプランが可視化されます。これにより、同じクエリでもサンプルごとに異なるレイテンシを基に、比較したいクエリ実行サンプルを簡単に特定できます。
[クエリプランのサンプル] グラフには、特定の時間に実行されているすべてのクエリプランと、各プランの実行に要した時間が表示されます。クエリプランのサンプリング レートは固定されており、データベースごとに 1 分あたり最大 5 個をサンプルとして使用します。サンプリングは、CPU 使用率が高い上位のクエリと DML ステートメントについてのみ行われます。
デフォルトでは、右側のパネルに最新のクエリプランが図示されます。別のサンプル クエリプランの詳細を表示するには、グラフ上のそれぞれのドットをクリックします。詳細が開き、クエリプランのすべての演算子のモデルが表示されます。演算子を選択すると、その演算子に関する詳細を確認できます。また、クエリプランでは、合計経過時間、CPU 時間、クエリで返された行数やスキャンされた行数などの指標を大まかに確認できます。
ユースケース
クエリプラン サンプルを使用して、クエリプランの変動を理由とするレイテンシの差異を確認することもできます。クエリプランは以下の理由で変動することがあります。
インデックスの追加や削除など、ユーザーによるスキーマの変更
オプティマイザーの統計情報パッケージの更新
それでは、突然のレイテンシの増加を理解するのにクエリプラン サンプルがどのように役立つか、実例を見ていきましょう。レイテンシの急増は、スキーマの変更に起因することがあります。
あるユーザーが、使用頻度の高い上位 N 個のクエリの中にコストが高いクエリがあることを発見し、そのクエリの [クエリの詳細] ページに移動しました。
最初のグラフにおいて 2 つのクエリプラン サンプルを確認できます。1 つ(3:24 AM)は、もう 1 つ(3:12 AM)より時間がかかっており、下のグラフの 3:20 AM 時点での平均クエリ レイテンシの急激な上昇に相関しています。
左側のクエリプランでは、インデックス idx_price を介してインデックスのみのスキャンが実行されていることがわかります。これは、Cloud Spanner が、インデックスに一致するテーブル内の行のみを参照していることを意味します。このオペレーションは高速で、レイテンシは約 68.93 ms となっています。
右側のクエリプランでは、データベースにより order_item テーブルのフルスキャンが実行されていることがわかります。これは、データベースが、WHERE 句に一致するかどうかに関係なく、テーブルのすべての行を参照していることを意味します。このオペレーションは低速で、レイテンシは 1.78 秒となっています。
下の表でわかるように、クエリのレイテンシは、3:20 AM 以降では、3:20 AM より前に実行されたときよりも 25 倍になっています。これは、クエリのパフォーマンスが低下した期間に、ユーザーがインデックス idx_price を削除したことが原因である可能性が高いです。つまり、Cloud Spanner がインデックスを使用してクエリ条件に一致する行をすばやく見つけることができなくなったということです。その代替手段としてテーブルのフルスキャンを実行する必要があり、これがオペレーションの大幅な速度低下につながっています。
このパフォーマンスの問題を解決するには、ユーザーはインデックス idx_price をテーブルに再び追加する必要があります。そうすることで、Cloud Spanner はこのインデックスを使用してクエリ条件に一致する行をすばやく見つけられるようになり、クエリの実行速度が大幅に改善します。
ユーザーは、クエリ実行プランを JSON 形式でダウンロードして、パフォーマンスをデバッグするにあたりサポートが必要な場合に、Google Cloud サポートと共有することもできます。
まとめると、クエリプラン サンプルは、デベロッパーがクエリ パフォーマンスの問題を診断し、クエリ レイテンシの突然の変化をトラブルシューティングするための効果的なツールであることがわかります。
今すぐクエリプラン サンプルを使い始める
クエリプラン サンプルはデフォルトで有効になっており、追加料金なしでご利用いただけます。クエリプラン サンプルの詳細については、こちらのドキュメントを参照してください。サンプリングはパフォーマンスにほとんど影響することなく実施でき、デベロッパーやデータベース管理者がパフォーマンスの問題のデバッグに費やす時間を削減できます。すべての指標は、Google Cloud のエンタープライズ向けのセキュリティ、プライバシー、コンプライアンスによって保護されています。
Spanner をはじめてご利用の場合は、90 日間の Spanner 無料トライアル インスタンスを作成しましょう。Spanner を無料で試すことができます。
- ソフトウェア エンジニア Varun Gupta