Spanner の組み込み統計テーブルの概要

Spanner に組み込まれている統計テーブルを使用すると、データベースの問題を調査しやすくなります。統計テーブルに対してクエリを実行することで、クエリ、トランザクション、読み取りに関する分析情報を取得できます。以下の一覧は、各統計テーブルと得られる情報の概要をまとめたものです。

クエリの統計情報

データベースの問題を調査する際には、高コストのクエリ、頻繁に実行されるクエリ、大量のデータをスキャンするクエリを把握すると便利です。

クエリ統計は、クエリ(DML ステートメントと変更ストリーム クエリを含む)の集計統計情報であり、1 分、10 分、60 分の間隔で収集されます。正常に完了したステートメントのほか、失敗したステートメント、タイムアウトになったステートメント、ユーザーがキャンセルしたステートメントに関する統計情報が収集されます。

統計情報には、CPU 使用率の最高値、クエリの合計実行数、平均レイテンシ、スキャンされた大部分のデータ、追加の基本的なクエリ統計が含まれます。これらの統計情報を参照することで、高コストで実行頻繁の高いクエリ、あるいはデータ量の多いクエリを特定できます。

Query Insights ダッシュボードを使うことで、これらの指標を時系列で可視化できます。事前に構築されたダッシュボードは、CPU 使用率の急上昇を確認し、非効率的なクエリを特定する際に活用できます。

最も古いアクティブなクエリ

実行中のクエリを調べることで、システムの現在のワークロードを確認したい場合があります。最も古いアクティブなクエリのツールを使用して、データベースのパフォーマンスに影響する可能性のある長時間実行クエリを調査します。このツールでは、どのクエリが実行されているのか、それがいつ開始されたのか、どのセッションに属しているのかがわかります。

変更ストリーム クエリは、最も古いアクティブなクエリに含まれません。

読み取りの統計情報

読み取りの統計情報を使うことで、Spanner Reads API を利用して、データベース内で最も頻繁に実行されている読み取り処理や、最もリソースを消費している読み取り処理を調査できます。これらの統計情報は、3 つの異なる時間間隔(1 分、10 分、1 時間)で収集および保存されます。Spanner は、時間間隔ごとに最も多くのリソースを使用している読み取り処理を追跡します。

読み取りの統計情報を使えば、すべての読み取り処理による合計リソース使用量を把握したり、CPU を最も消費している読み取り処理を特定したり、特定の読み取りの実行頻度が経時的にどのように変化するか調べたりできます。

トランザクションの統計情報

トランザクションの統計情報は、トランザクションに関連した問題を調査するために使用できます。たとえば、競合を引き起こしている可能性がある実行速度の遅いトランザクションの有無を確認したり、パフォーマンスの低下につながるトランザクションの状態の変化を特定したりできます。各行には、1 分、10 分、60 分の時間間隔でデータベース経由で実行されたすべてのトランザクションの統計情報が含まれています。

トランザクションの分析情報ダッシュボードを使用することで、これらの指標を時系列で可視化できます。事前に構築されたダッシュボードでは、トランザクションのレイテンシや問題のあるトランザクションを把握できます。

ロックの統計情報

ロックの統計情報を使用することで、データベースにおけるロック競合を調査できます。トランザクションの統計情報と併用すると、同じセルで同時にロックを取得することにより、ロック競合を引き起こすトランザクションを見つけることができます。

[ロックの分析情報] ダッシュボードを使えば、これらの指標を時系列で可視化できます。事前に構築されたダッシュボードでは、ロックの待機時間を表示し、ロックの待機時間が高いロックの競合がレイテンシの原因になっているかどうかを確認できます。

各ツールに含まれる API メソッド

Spanner では、トランザクション間の読み取りクエリとの間に重複があります。このため、各イントロスペクション ツールの結果をコンパイルする際に、どの API メソッドを含めるのかが明確になりません。次の表に、主な API メソッドと各ツールとの関係を示します。

API メソッド トランザクション モード クエリの統計情報 最も古いアクティブなクエリ 読み取りの統計情報 トランザクションの統計情報 ロックの統計情報
Read、StreamingRead 読み取り専用トランザクション 1 × いいえ いいえ ×
読み取り / 書き込みトランザクション × いいえ
ExecuteSql、ExecuteStreamingSql 読み取り専用トランザクション 1 2 2 × いいえ ×
読み取り / 書き込みトランザクション いいえ
ExecuteBatchDml 読み取り / 書き込みトランザクション 3 4 ×
Commit 読み取り / 書き込みトランザクション(DML5、ミューテーション6 × いいえ いいえ

注:

1 読み取り専用トランザクションは、トランザクションの統計情報やロックの統計情報には含まれません。読み取り / 書き込みトランザクションのみがトランザクションの統計情報やロックの統計情報に含まれます。

2 PartitionQuery API で実行されるクエリは、最も古いアクティブなクエリの統計情報に含まれません。

3 DML ステートメントのバッチは、クエリ統計で 1 つのエントリとして表示されます。

4 バッチ内のステートメントは、バッチ全体ではなく、最も古いアクティブなクエリに表示されます。

5 commit されていない DML オペレーションは、トランザクションの統計情報には含まれません。

6 実質的に一切のオペレーションを伴わない空のミューテーションは、トランザクションの統計情報には含まれません。

テーブルサイズの統計情報

テーブルサイズの統計情報を使用すると、データベース内のテーブルとインデックスの履歴サイズをモニタリングできます。

テーブルサイズの統計情報を使用して、テーブル、インデックス、変更ストリーム テーブルのサイズの傾向を確認します。また、最大のテーブルとインデックスを追跡することもできます。

なお、この機能は過去の履歴のみを提供するものです。リアルタイムのモニタリング用ではありません。

テーブル オペレーションの統計情報

テーブル オペレーションの統計情報を使用すると、次のことができます。

  • データベース内のテーブルとインデックスの使用状況をモニタリングする。
  • テーブルとインデックスの使用状況の傾向を把握する。
  • トラフィックの変化を特定する。

また、テーブルのストレージの変化と書き込みトラフィックの変化を関連付けて分析することもできます。

列オペレーションの統計情報

列オペレーションの統計情報を使用すると、次のことができます。

  • テーブル内の列の統計情報をモニタリングする。
  • テーブル列の使用状況の傾向を把握する。

スプリット内のホットスポットをデバッグする

データベース内のホットスポットをデバッグすることで、データベース内の「ウォーム」または「ホット」なスプリットを特定できます。これは、スプリットの負荷の大部分が、利用可能なリソースによる制約を受けている状態を意味します。直近 6 時間でスプリット CPU 使用率スコアが最も高かったスプリットの統計情報を 1 分間隔で表示できます。