クエリ統計テーブル

Cloud Spanner では、CPU を最も多く使用したクエリおよびすべてのクエリの総計について、多数の統計情報を保持する組み込みテーブルが提供されています。Google Cloud Platform Console はこれらの SPANNER_SYS.QUERY_STATS* テーブル内のデータを使用してクエリ統計ビューを生成しますが、SQL ステートメントを使用してテーブルから統計を取得することもできます。

使用方法

SPANNER_SYS データは SQL インターフェース(executeQuerygcloud spanner databases execute-sql など)を介してのみ利用できます。Cloud Spanner が提供する他の単一読み取りメソッドは SPANNER_SYS をサポートしていません。

クエリごとにグループ化された CPU 使用率

次のテーブルでは、特定の期間中に CPU 使用率が最も高いクエリが追跡されます。

  • SPANNER_SYS.QUERY_STATS_TOP_MINUTE: 1 分間のクエリ
  • SPANNER_SYS.QUERY_STATS_TOP_10MINUTE: 10 分間のクエリ
  • SPANNER_SYS.QUERY_STATS_TOP_HOUR: 1 時間のクエリ

これらのテーブルには以下のプロパティがあります。

  • 各テーブルには、テーブル名で指定された長さの、時間間隔が重複しないデータが含まれています。

  • 時間間隔は時刻に基づきます。1 分の間隔は現在の分が終わるときに終了し、10 分の間隔は正時に始まって 10 分ごとに終了し、1 時間の間隔は正時になるたびに終了します。

    たとえば、午前 11 時 59 分 30 秒に SQL クエリで使用可能な最新の時間間隔は次のとおりです。

    • 1 分: 午前 11:58:01〜11:59:00
    • 10 分: 午前 11:40:01〜11:50:00
    • 1 時間: 午前 10:00:01~11:00:00
  • Cloud Spanner は統計を SQL クエリのテキストごとにグループ化します。クエリでクエリ パラメータを使用する場合、Cloud Spanner はそのクエリのすべての実行を 1 行にグループ化します。クエリで文字列リテラルを使用する場合、Cloud Spanner はクエリテキスト全体が同一の場合のみ統計をグループ化し、いずれかのテキストが異なっていれば、各クエリは別々の行として表示されます。

  • 各行には、指定された期間中に Cloud Spanner が統計をキャプチャした特定の SQL クエリのすべての実行に関する統計が含まれています。

  • 期間中に実行されたすべてのクエリを Cloud Spanner が保存できない場合、指定された期間中の CPU 使用率が最も高いクエリが優先されます。

テーブル スキーマ

列名 説明
INTERVAL_END TIMESTAMP その時間間隔に含まれているクエリが実行された時間間隔の終わり。
TEXT STRING SQL クエリテキスト。約 64 KB に切り捨てられます。
TEXT_TRUNCATED BOOL クエリテキストが切り捨てられたかどうか。
TEXT_FINGERPRINT INT64 クエリテキストのハッシュ。
EXECUTION_COUNT INT64 Cloud Spanner が一定期間内にクエリを検出した回数。
AVG_LATENCY_SECONDS FLOAT64 データベース内での各クエリ実行の平均時間(秒単位)。この平均からは、オーバーヘッドだけでなく、結果セットのエンコードおよび伝送時間も除外されます。
AVG_ROWS FLOAT64 クエリから返された平均行数。
AVG_BYTES FLOAT64 送信エンコードのオーバーヘッドを除いた、クエリから返されたデータの平均バイト数。
AVG_ROWS_SCANNED FLOAT64 クエリでスキャンされた平均行数(削除された値を除く)。
AVG_CPU_SECONDS FLOAT64 Cloud Spanner がクエリを実行するためにすべての操作に費やした CPU 時間の平均秒数。

集計した統計のテーブル

Cloud Spanner が特定の期間に統計情報をキャプチャした、すべてのクエリの集計データを追跡するテーブルもあります。

  • SPANNER_SYS.QUERY_STATS_TOTAL_MINUTE: 1 分間のクエリ
  • SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE: 10 分間のクエリ
  • SPANNER_SYS.QUERY_STATS_TOTAL_HOUR: 1 時間のクエリ

これらのテーブルには以下のプロパティがあります。

  • 各テーブルには、テーブル名で指定された長さの、時間間隔が重複しないデータが含まれています。

  • 時間間隔は時刻に基づきます。1 分の間隔は現在の分が終わるときに終了し、10 分の間隔は正時に始まって 10 分ごとに終了し、1 時間の間隔は正時になるたびに終了します。

    たとえば、午前 11 時 59 分 30 秒に SQL クエリで使用可能な最新の時間間隔は次のとおりです。

    • 1 分: 午前 11:58:01〜11:59:00
    • 10 分: 午前 11:40:01〜11:50:00
    • 1 時間: 午前 10:00:01~11:00:00
  • 各行には、指定した期間中にデータベースに対して実行されたすべてのクエリの統計がまとめて含まれています。時間間隔ごとに 1 行のみとなります。

  • TOTAL テーブルにキャプチャされた統計には、Cloud Spanner が TOP テーブルでキャプチャしなかったクエリが含まれる場合があります。

テーブル スキーマ

列名 説明
INTERVAL_END TIMESTAMP その時間間隔に含まれているクエリが実行された時間間隔の終わり。
EXECUTION_COUNT INT64 Cloud Spanner が一定期間内にクエリを検出した回数。
AVG_LATENCY_SECONDS FLOAT64 データベース内での各クエリ実行の平均時間(秒単位)。この平均からは、オーバーヘッドだけでなく、結果セットのエンコードおよび伝送時間も除外されます。
AVG_ROWS FLOAT64 クエリから返された平均行数。
AVG_BYTES FLOAT64 送信エンコードのオーバーヘッドを除いた、クエリから返されたデータの平均バイト数。
AVG_ROWS_SCANNED FLOAT64 クエリでスキャンされた平均行数(削除された値を除く)。
AVG_CPU_SECONDS FLOAT64 Cloud Spanner がクエリを実行するためにすべての操作に費やした CPU 時間の平均秒数。

データの保持

Cloud Spanner は最低でも、次の期間中に各テーブルのデータを保持します。

  • SPANNER_SYS.QUERY_STATS_TOP_MINUTE および SPANNER_SYS.QUERY_STATS_TOTAL_MINUTE: 過去 6 時間を対象とする間隔。

  • SPANNER_SYS.QUERY_STATS_TOP_10MINUTE および SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE: 過去 4 日間を対象とするインターフェース。

  • SPANNER_SYS.QUERY_STATS_TOP_HOUR および SPANNER_SYS.QUERY_STATS_TOTAL_HOUR: 過去 30 日間を対象とする間隔。

クエリの例

このセクションには、クエリ統計を取得する SQL ステートメントの例がいくつか含まれています。これらの SQL ステートメントは、クライアント ライブラリgcloud コマンドライン ツール、GCP Console を使用して実行できます。

特定の期間における各クエリの基本的な統計を一覧表示する

次のクエリは、直前の 1 分間における上位のクエリの生データを返します。

SELECT text,
       interval_end,
       execution_count,
       avg_latency_seconds,
       avg_rows,
       avg_bytes,
       avg_rows_scanned,
       avg_cpu_seconds
FROM spanner_sys.query_stats_top_minute
ORDER BY interval_end;

CPU 使用率が最も高いクエリを一覧表示する

次のクエリは、直前の 1 時間における CPU 使用率が最も高いクエリを返します。

SELECT text,
       execution_count AS count,
       avg_latency_seconds AS latency,
       avg_cpu_seconds AS cpu,
       execution_count * avg_cpu_seconds AS total_cpu
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_top_hour)
ORDER BY total_cpu DESC;

特定の期間における総実行数を調べる

次のクエリは、直近の 1 分間に実行されたクエリの総数を返します。

SELECT interval_end,
       execution_count
FROM spanner_sys.query_stats_total_minute
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_top_minute)
ORDER BY interval_end;

クエリの平均レイテンシを求める

次のクエリは、特定のクエリの平均レイテンシ情報を返します。

SELECT avg_latency_seconds
FROM spanner_sys.query_stats_top_hour
WHERE text LIKE "SELECT x FROM table WHERE x=@foo;";

最も多くのデータをスキャンするクエリを見つける

クエリがスキャンしたデータ量の尺度として、クエリによってスキャンされた行数を使用できます。次のクエリは、直前の 1 時間に実行されたクエリによってスキャンされた行数を返します。

SELECT text,
       execution_count,
       avg_rows_scanned
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_top_hour)
ORDER BY avg_rows_scanned DESC;

すべてのクエリでの CPU 使用率の合計

次のクエリは、直前の 1 時間に使用された CPU 時間数を返します。

SELECT (avg_cpu_seconds * execution_count / 60 / 60)
  AS total_cpu_hours
FROM spanner_sys.query_stats_total_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_total_hour);

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Spanner のドキュメント