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 実質的に一切のオペレーションを伴わない空のミューテーションは、トランザクションの統計情報には含まれません。
テーブルサイズの統計
テーブルサイズの統計情報を使用すると、データベース内のテーブルとインデックスの履歴サイズをモニタリングできます。
テーブルサイズの統計情報を使用して、テーブル、インデックス、変更ストリーム テーブルのサイズの傾向を確認します。また、最大のテーブルとインデックスを追跡することもできます。
なお、この機能は過去の履歴のみを提供するものです。リアルタイムのモニタリング用ではありません。
テーブル オペレーションの統計情報
テーブル オペレーションの統計情報を使用すると、次のことができます。
- データベースでのテーブルとインデックスの使用状況をモニタリングします。
- テーブルとインデックスの使用状況の傾向を確認します。
- トラフィックの変化を特定します。
また、テーブル ストレージ内の変更を書き込みトラフィックの変更と関連付けることもできます。