このページでは、ロックの分析情報とトランザクションの分析情報を使用して、レイテンシの増加につながるトランザクションを特定する方法について説明します。
概要
Spanner は、複数の並列トランザクションの整合性を保証するために、ロックを使用してデータへのアクセスを制御します。ロック競合は、多くのトランザクションが同じロックに頻繁にアクセスする必要があり、レイテンシが大きくなる場合に発生します。ビジュアル インターフェースがないと、ロック競合の問題を大量に引き起こす問題のあるトランザクションを特定するのが、面倒になる可能性があります。
Spanner のオペレーションは、オペレーションが読み取り / 書き込みトランザクションに含まれるときにロックを取得します。読み取り専用トランザクションはロックを取得しません。
Spanner では、次の手順を行うことで高レイテンシの原因となるトランザクションを特定できます。
- Spanner Monitoring を使用してレイテンシの急増を確認する。
- ロックの分析情報を使用してロック競合の問題を確認する。
- トランザクションの分析情報を使用して問題のあるトランザクションを特定する。
料金
ロックの分析情報またはトランザクションの分析情報に追加料金はかかりません。
リージョン構成
ロック分析情報とトランザクション分析情報は、リージョン構成とマルチリージョン構成の両方で利用できます。
データの保持
[ロックの分析情報] ダッシュボードと [トランザクション分析情報] ダッシュボードに表示されるデータの最大保持期間は 30 日です。グラフの場合、データは SPANNER_SYS.*
テーブルから取得されます。このテーブルの最大保持期間は 30 日です。
これらのテーブルとデータ保持の詳細については、ロック統計情報とトランザクション統計情報をご覧ください。
必要なロール
IAM ユーザーか、きめ細かいアクセス制御ユーザーかによって、異なる IAM のロールと権限が必要です。
Identity and Access Management(IAM)ユーザー
ロックとトランザクションの分析情報ページの表示に必要な権限を取得するには、インスタンスに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Cloud Spanner 閲覧者(
roles/spanner.viewer
) -
Cloud Spanner データベース読み取り(
roles/spanner.databaseReader
)
[ロック] と [トランザクション] の分析情報ページを表示するには、Cloud Spanner データベース読み取り(
roles/spanner.databaseReader
)ロールの次の権限が必要です。
spanner.databases.beginReadOnlyTransaction
spanner.databases.select
spanner.sessions.create
きめ細かいアクセス制御ユーザー
きめ細かいアクセス制御ユーザーは、次のことを確認してください。
- Cloud Spanner 閲覧者(
roles/spanner.viewer
)がある。 - きめ細かいアクセス制御の権限のみがあり、
spanner_sys_reader
システムロールまたはそのメンバーのロールのいずれかが付与されている。 - データベースの概要ページで、現在のシステムロールとして
spanner_sys_reader
またはメンバーロールを選択する。
詳細については、細かいアクセス制御についてと細かいアクセス制御システムのロールをご覧ください。
Spanner Monitoring を使用してレイテンシの急増を確認する
Cloud Monitoring を使用して、すべてのリクエストに対して指定したしきい値を超える指標にアラートを設定できます。
インスタンスのレイテンシの急増を示すアラートが表示された場合は、Spanner Monitoring ダッシュボードで確認できます。このダッシュボードには、さまざまな重要な指標のグラフが表示されます。レイテンシ グラフには、50 パーセンタイルと 99 パーセンタイルでの高いレイテンシが表示されます。
99 パーセンタイルでの書き込みレイテンシの急増を確認するには、次の手順を行います。
Google Cloud コンソールで、[Spanner インスタンス] ページに移動します。
インスタンスの名前をクリックします。
Google Cloud コンソールにインスタンスの概要が表示されます。
ナビゲーション メニューの [モニタリング] をクリックします。
Google Cloud コンソールに、インスタンスの履歴データのグラフが表示されます。
[レイテンシ] グラフで、[関数] を
Write
、[パーセンタイル] を99th
に設定します。更新されたグラフで急激な増加が発生しているかどうかを確認します。
CPU 使用率が急上昇せず、1 秒あたりのオペレーションでエラーが急増していることが観察した場合は、レイテンシの競合がロックの競合によるものであると考えられます。
ロックの分析情報を使用してロック競合の問題を確認する
[ロックの分析情報] ダッシュボードには、インスタンスまたは選択したデータベースのロックの待機時間を表示できます。これは、高レイテンシの原因がロック競合にあるかどうかを確認するうえで役立ちます。
ロックの待機時間が長いことを確認する
ロックの待機時間が長いことを確認するには、次の手順に従います。
ナビゲーション メニューで [ロックの分析情報] をクリックします。
Google Cloud コンソールに [合計ロック待機] グラフが表示されます。このグラフには、インスタンス内の各データベースのロック待機時間が表示されます。
表示されるデータは、ロックの分析情報ダッシュボードの右上隅にあるタイムセレクタにデフォルトで
1 hour
が表示されているものです。より広い範囲のデータを確認するには、1 day
などの別のオプションを選択します。詳細については、グラフの操作をご覧ください。
上部の [データベース] セレクタから、ロックの待機時間が最も長いデータベースを選択します。
[ロック待機の合計] グラフが更新され、選択したデータベースのデータのみが表示されます。
さらに、[行の範囲ごとのロック待機] という別のグラフには、行範囲ごとのロック待機時間のグラフが表示されます。
グラフをクリックして水平方向にドラッグし、レイテンシの急増が見られる時間を拡大します。
ロック待機データを分析する
[ロック分析情報] テーブルには、SPANNER_SYS.LOCK_STATS
システム テーブルの次の列が表示されます。
- 行範囲の開始キー: ロックの競合が発生した行キー。競合が行の範囲を伴う場合、値は範囲の開始キーを表します。プラス記(
+
)は範囲を示します。 - ロック待機時間: 水平バーに表示されるロック待機時間の合計。デフォルトでは、この列を使用して並べ替えが行われ、ロックの待機時間が最も長い行範囲の開始キーがテーブルの一番上に表示されます。
- ロック待機時間(秒): 行キー範囲のすべての列で記録されたロック競合の累積ロック待機時間(秒)。
- ロック待機時間(%): 行キー範囲のすべての列で記録されたロック競合の待機時間の、データベース内のすべての行キー範囲の合計ロック待機時間に対する割合。
[行ごとのロック待機] グラフのデータを、テーブル内のデータに関連付けるには、行を選択します。関連する行がハイライト表示されます。逆に、テーブル内の行のチェックボックスをオンにすると、グラフに関連する線が表示されます。
テーブルのデータをフィルタするには、次の操作を行います。
[フィルタ] の横にあるテキスト ボックスをクリックします。
プロパティを選択し、演算子を選択して値を指定します。
テーブルには、フィルタに一致するデータが表示されます。
ロック リクエストのサンプルを表示する
[ロック リクエストのサンプル] パネルに、競合するトランザクションからのサンプル ロック リクエストが表示されます。
行範囲の開始キーのサンプル ロック リクエスト情報を表示するには、テーブル内の関連するリンクをクリックします。
テーブルに次の情報の列が表示されます。
- サンプルの列名: 行キーの範囲でロック競合が発生した列。
- ロックモード: リクエストされたロックモード。
- トランザクションの表示: [トランザクション分析情報] ページへのリンク。ロック競合している可能性のあるトランザクションが表示されます。
トランザクションの分析情報を使用して競合するトランザクションを特定する
トランザクションの分析情報ダッシュボードでは、インスタンスまたは選択したデータベースのトランザクションのレイテンシを確認できます。これは、ロック競合による高レイテンシの原因となっている可能性のあるトランザクションを特定するうえで役立ちます。
トランザクションのレイテンシを表示する
トランザクションのレイテンシを表示する手順は次のとおりです。
左側のナビゲーションで [トランザクション分析情報] をクリックします。
上部の [データベース] セレクタから、ロックの待機時間が最も長いデータベースを選択します。
または、ロックの分析情報ダッシュボードで [取引の表示] をクリックして、特定のサンプル列に対して読み取りまたは書き込みを行うトランザクションをフィルタリングします。
表示されるデータは、トランザクション分析情報ダッシュボードの右上隅にあるタイムセレクタにデフォルトで
1 hour
が表示されているものです。
ダッシュボードには、次のグラフが表示されます。
[平均レイテンシ(すべてのトランザクション)] グラフには、インスタンス内のすべてのトランザクションのレイテンシが表示されます。
[平均レイテンシ(トランザクションごと)] グラフには、選択したデータベースの各トランザクションのレイテンシが表示されます。
トランザクション データを分析する
グラフの下のテーブルに各トランザクションのデータを表示し、分析できます。このテーブルには、SPANNER_SYS.TXN_STATS
システム テーブルの指標データが次の列に表示されます。
- フィンガープリント: トランザクション タグのハッシュ(存在する場合)。存在しない場合、ハッシュはトランザクションに関連するオペレーションに基づいて計算されます。この値は、[トランザクション詳細] ページに移動するリンクです。
- トランザクション タグ: トランザクションのオプションのトランザクション タグ。同じタグ文字列を持つ複数のトランザクションの統計情報のデータが、そのタグ文字列に一致する
TRANSACTION_TAG
ラベルがある 1 行にまとめられます。 - 影響を受けるテーブル: トランザクションの影響を受けるテーブル。
- Table.column Read: トランザクションが読み取った列。
- Table.column Written: トランザクションが書き込んだ列。
- 平均レイテンシ(秒): トランザクションの実行にかかった平均秒数。デフォルトでは、テーブルはこの列の降順で並べ替えられます。
[平均レイテンシ(トランザクションごと)] グラフのデータをテーブル内のデータと関連付けるには、グラフ上の線を選択します。テーブル内の対応する行がハイライト表示されます。
テーブルのデータをフィルタするには、次の操作を行います。
[フィルタ] の横をクリックします。
プロパティを選択し、演算子を選択して値を指定します。
テーブルには、フィルタに一致するデータが表示されます。
トランザクションの詳細情報を表示する
トランザクションの詳細情報(レイテンシが最も高いものなど)を表示するには、表内の各行の [フィンガープリント] リンクをクリックします。
[トランザクション詳細] ページが表示されます。上部の詳細テーブル以外に次の情報が表示されます。
次の各指標の数値を示すバー:
- 平均バイト数: トランザクションによって書き込まれた平均バイト数。
- 平均レイテンシ: トランザクションの最初のオペレーションから commit または中断までにかかった平均秒数。
- 平均 commit レイテンシ: commit オペレーションの実行にかかった平均秒数。
- 合計試行回数: トランザクションの試行の総数。
- 合計中止回数: 中止されたトランザクションの合計試行回数(トランザクションの commit メソッドを呼び出す前に中止されたものを含む)。
これらの値を示すグラフ。
また、[Average participants] グラフには、各 commit 試行の平均参加者数が表示されます。
トランザクションの形状を最適化してレイテンシを短縮できるかどうかを調べます。 ロックの競合を減らすためのおすすめの方法を検討します。