このページでは、クエリプラン ビジュアライザの主なコンポーネントについて説明します。
Google Cloud コンソールのクエリプラン ビジュアライザを使用すると、Spanner がクエリを評価するために選択した実行プランの構造を把握できます。
可視化ツールは、プランを視覚的なグラフとして表示します。これにより、Spanner がクエリを実行する方法を簡単に分析し、潜在的なパフォーマンス ボトルネックを特定できます。クエリプラン ビジュアライザを使用すると、次のことができます。
- 遅いクエリをデバッグする: クエリプランのどの部分に最も時間がかかっているか、またはリソースを消費しているかを特定します。
- 最適化を検証する: 変更(インデックスの追加や結合の書き換えなど)を行う前後のクエリプランを比較して、改善を確認します。
- クエリの動作を理解する: Spanner が結合、集計、分散オペレーションなどの複雑な SQL ステートメントを処理する方法を学習します。
クエリプラン ビジュアライザーを使用するメリット
クエリプランは複雑になることがあります。ビジュアライザーには次の機能があり、プランの分析を簡素化できます。
- グラフィカル表現: テーブルとインデックスからさまざまな演算子を介して最終結果に至るまでのデータフローが表示されます。
- パフォーマンス分析情報: 高レイテンシと CPU 使用率の視覚的な手がかりを使用して、高コストの演算子を特定します。
- 行数の可視化: 各ステップのデータ量を線の太さで示します。
- 詳細な統計情報: 各演算子の具体的なランタイム統計情報を提供します。
クエリプラン ビジュアライザにアクセスする
Google Cloud コンソールでクエリプラン ビジュアライザにアクセスするには、次のいずれかの方法を使用します。
- Spanner Studio: クエリの作成とテスト中に、ライブのオンデマンド クエリプランを生成します。
- Query Insights: 本番環境のワークロードからキャプチャされた、サンプリングされた過去のクエリプランを時系列で表示します。
Spanner Studio でオンデマンド プランを表示する
Spanner Studio でクエリのクエリプランをオンデマンドで表示するには:
Google Cloud コンソールで、[Spanner インスタンス] ページに移動します。
クエリを実行するデータベースを含むインスタンスの名前をクリックします。
[データベース] リストで、データベースの名前をクリックします。
ナビゲーション メニューで [Spanner Studio] をクリックします。
エディタペインに SQL クエリを入力します。
[実行] をクリックします。
[説明] タブをクリックします。
Query Insights でサンプリングされたプランを表示する
Query Insights でサンプリングされた過去のクエリプランを表示するには:
Google Cloud コンソールで、[Spanner インスタンス] ページに移動します。
調査するデータベースを含むインスタンスの名前をクリックします。
ナビゲーション メニューで [Query Insights] をクリックします。
分析するデータベースと期間を選択します。
[上位 N クエリ] テーブルで、検査するクエリまたはリクエストタグをクリックします。
[クエリプランのサンプル] グラフで、クエリの実行を表すサンプルドットをクリックします。
[クエリプラン ビジュアライザ] セクションで、視覚的な実行プランを確認します。
ビジュアライザーを操作する
ビジュアライザには、クエリプランが有向非巡回グラフ(DAG)として表示されます。

実行したクエリによっては、クエリプランの可視化のサイズが大きくなる場合があります。詳細の表示と非表示を切り替えるには、[展開/最小] 表示セレクタをクリックします。ズームインまたはズームアウトするには、ズーム コントロールを使用します。
ビジュアライザー インターフェースには、次の情報パネルがあります。
可視化されたクエリプランをダウンロードするには、[JSON をダウンロード] をクリックします。後でクエリプランを表示するには、ダウンロードした JSON プロファイルを Spanner Studio にインポートします。パフォーマンスの問題をトラブルシューティングする必要がある場合は、JSON ファイルを Spanner サポートチームと共有します。
クエリプランの非巡回グラフ
Spanner がクエリの実行に使用するロジックが DAG として表示されます。グラフには、データフローが下から上に表示されます。テーブルとインデックスは下部に表示され、最終的なクエリ出力は上部に表示されます。
グラフ内の各ノードはカードで表されます。各カードは、入力から行を取り込み、親に行を生成するイテレータを表します。
カードを接続する線は、イテレータ間の行のフローを表します。線の太さは、渡された行の相対数を示します。線が太いほど、行数が多いことを示します。
グラフの各カードには、次の情報が含まれています。
- イテレータ名: イテレータの名前。
- ランタイム統計情報: 返された行数、レイテンシ、CPU 使用率。
カードをクリックすると、レイテンシ、CPU 使用率、返された行数、実行回数、マシン グループ数に関する詳細情報が表示されます。
演算子の詳細については、クエリ実行演算子をご覧ください。
Spanner クエリは、多くの場合、複数のデータベース スプリットからデータを取得します。マシングループは、一連のスプリットに対して一緒に実行される一連の連続したクエリ実行オペレーターを表します。1 つのマシン グループ内では、演算子は下から上に順番に実行されますが、異なるマシン グループは並列で実行されます。データがマシン グループの境界を越えてスプリット間を移動するときは、リモート プロシージャ コール(RPC)を介して移動します。
スプリットの詳細については、データベースのスプリットをご覧ください。
ビジュアライザーを使用すると、論理分布と物理分布を区別できます。
- 論理境界: 「分散」というラベルが付いたカードは、クエリプランナーがクエリロジックを分割した場所を示します。
- 物理的な分布: グラフ上のマシングループの色は、ランタイム統計から導出された実際の物理的な実行を表します。
物理的な境界は論理分散演算子と一致することが多いですが、サーバー間でスプリットがどのように配置されるかによって異なる場合があります。
クエリサマリー
[クエリの概要] ペインには、次の概要実行指標が表示され、クエリの潜在的なボトルネックがハイライト表示されます。
- 合計経過時間: クエリの実行にかかった合計時間(開始から終了まで)。
- CPU 時間: クエリを処理するすべてのスレッドとサーバーで消費された累積 CPU 時間。
- プラン作成時間: クエリ コンパイラとオプティマイザーが実行プランの生成に費やした時間。
- サーバーキューの遅延: 処理が開始される前にクエリがサーバーキューで待機していた時間。
- 返された行数: 最終的なクエリ結果で返された行の合計数。
- スキャンされた行数: スキャンされたすべてのテーブルとインデックスでストレージから読み取られた行の合計数。
- リモート呼び出し: スプリットまたはマシングループ間で行われた RPC の合計数。
- クエリ オプティマイザーのバージョン: プランのコンパイルに使用される Spanner クエリ オプティマイザーのバージョン。
- 統計情報パッケージ: コストベースの最適化に使用されるオプティマイザーの統計情報パッケージ。
主な演算子
[主要な演算子] セクションには、クエリプランで最もリソースを消費するイテレータがハイライト表示されます。
- レイテンシが最長: 実行時間が最も長い演算子。
- 最大 CPU 時間: CPU 時間を最も消費した演算子。
- 最大行数: 処理または返された行数が最も多い演算子。
クエリ実行タイムライン
[クエリ実行タイムライン] タブには、各マシングループがクエリの一部を実行する時間を示す時間ベースのグラフが表示されます。マシングループは、クエリの実行時間全体を通して実行されるとは限りません。また、複数回実行されることもあります。ただし、タイムラインには、最初の実行の開始時刻と最後の実行の終了時刻のみが表示されます。
パフォーマンスを高める視覚効果
ビジュアライザでは、次の色とアイコンを使用して問題を特定できます。
- 赤いバー: クエリ全体に対して、そのオペレーターが消費したレイテンシまたは CPU 時間の割合を示します。
- 警告を示す三角形: テーブル全体のスキャンが発生したことを示します。このようなスキャンは、セカンダリ インデックスを追加するなどして、クエリを最適化する機会を示唆していることがよくあります。
- マシングループの色: マシングループを区別し、グループ間の移行をハイライト表示します。これらの移行では、異なるマシン間でリモート実行が必要になるため、シリアル化とネットワークのオーバーヘッドが発生します。クエリ実行タイムラインにも、これらのマシングループの色が表示されます。
次のステップ
- クエリプラン ビジュアライザを使用したクエリのチューニング方法を確認する。
- 特定のクエリ実行演算子について確認する。
- クエリ実行プランを詳しく理解する。