高いレイテンシの原因となるトランザクションを特定する

このページでは、ロックの分析情報とトランザクションの分析情報を使用して、レイテンシの増加につながるトランザクションを特定する方法について説明します。

概要

Spanner は、複数の並列トランザクションの整合性を保証するために、ロックを使用してデータへのアクセスを制御します。多くのトランザクションが同じロックに頻繁にアクセスする必要があり、レイテンシが大きくなる場合、ロックの競合が発生します。ビジュアル インターフェースがないと、ロックの競合の問題を大量に引き起こす問題のあるトランザクションを特定するのに手間がかかる可能性があります。

Cloud Spanner のオペレーションは、オペレーションが読み取り / 書き込みトランザクションに含まれるときにロックを取得します。読み取り専用トランザクションはロックを取得しません。

Spanner では、次の手順で高レイテンシの原因となるトランザクションを特定できます。

  1. Spanner Monitoring を使用してレイテンシの急増を確認する。
  2. ロックの分析情報を使用してロックの競合の問題を確認する。
  3. トランザクションの分析情報を使用して問題のあるトランザクションを特定する。

料金

ロックの分析情報またはトランザクションの分析情報に追加料金はかかりません。

リージョン構成

ロックの分析情報とトランザクションの分析情報は、リージョン構成とマルチリージョン構成の両方で利用できます。

データの保持

[ロックの分析情報] ダッシュボードと [トランザクション分析情報] ダッシュボードに表示されるデータの最大保持期間は 30 日です。グラフの場合、データは SPANNER_SYS.* テーブルから取得されます。このテーブルの最大保持期間は 30 日です。

これらのテーブルとデータの保持の詳細については、ロックの統計情報トランザクションの統計情報をご覧ください。

必要なロール

IAM ユーザーか、きめ細かいアクセス制御ユーザーかによって、異なる IAM のロールと権限が必要です。

Identity and Access Management(IAM)ユーザー

ロックの分析情報ページとトランザクションの分析情報ページの表示に必要な権限を取得するには、次の IAM ロールを対象となるインスタンスに付与するよう管理者に依頼してください。

ロックの分析情報ページとトランザクションの分析情報ページを表示するには、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 パーセンタイルでの書き込みレイテンシの急増を確認するには、次の手順で操作します。

  1. Google Cloud コンソールで、[Spanner インスタンス] ページに移動します。

    [Spanner インスタンス] に移動

  2. インスタンスの名前をクリックします。

    Google Cloud コンソールにインスタンスの概要が表示されます。

  3. ナビゲーション メニューの [モニタリング] をクリックします。

    Google Cloud コンソールに、インスタンスの履歴データのグラフが表示されます。

  4. [レイテンシ] グラフで、[関数] を Write、[パーセンタイル] を 99th に設定します。

  5. 更新されたグラフで急激な増加が発生しているかどうかを確認します。

書き込みレイテンシ(99 パーセンタイル)を示すグラフ

CPU 使用率は急上昇しておらず、1 秒あたりのオペレーションでエラーが急増している場合は、レイテンシの競合がロックの競合によるものであると考えられます。

ロックの分析情報を使用してロックの競合の問題を確認する

[ロックの分析情報] ダッシュボードでは、インスタンスまたは選択したデータベースのロックの待機時間を確認できます。これは、高レイテンシの原因がロックの競合にあるかどうかを確認するうえで役立ちます。

ロックの待機時間が長いことを確認する

ロックの待機時間が長いかどうか確認するには、次の手順で操作します。

  1. ナビゲーション メニューで [ロックの分析情報] をクリックします。

    コンソールに [ロック待機の合計] グラフが表示されます。このグラフには、インスタンス内の各データベースのロック待機時間が表示されます。 Google Cloud

    表示されるデータは、[ロックの分析情報] ダッシュボードの右上隅にあるタイムセレクタにデフォルトで 1 hour が表示されているものです。より広範なデータを表示するには、1 day などの別のオプションを選択します。

    詳細については、グラフの操作をご覧ください。

  2. 上部の [データベース] セレクタから、ロックの待機時間が最も長いデータベースを選択します。

    [ロック待機の合計] グラフが更新され、選択したデータベースのデータのみが表示されます。

    さらに、[行範囲ごとのロック待機] という別のグラフには、行範囲ごとのロックの待機時間のグラフが表示されます。

  3. グラフをクリックして水平方向にドラッグし、レイテンシの急増が見られる時間を拡大します。

[ロックの分析情報] ダッシュボード

ロックの待機のデータを分析する

[ロックの分析情報] テーブルには、SPANNER_SYS.LOCK_STATS システム テーブルの次の列が表示されます。

  • 行範囲の開始キー: ロックの競合が発生した行キー。競合が行の範囲に関係する場合、値はその範囲の開始キーを表します。プラス記号(+)は範囲を示します。
  • ロック待機: 水平バーに表示されるロック待機時間の合計。デフォルトでは、この列を使用して並べ替えが行われ、ロックの待機時間が最も長い行範囲の開始キーがテーブルの一番上に表示されます。
  • ロック待機(秒): 行キー範囲のすべての列で記録されたロックの競合の累積ロック待機時間(秒)。
  • ロック待機(%): 行キー範囲のすべての列で記録されたロックの競合の待機時間の、データベース内のすべての行キー範囲の合計ロック待機時間に対する割合。

[行範囲ごとのロック待機] グラフのデータをテーブル内のデータに関連付けるには、行を選択します。関連する行がハイライト表示されます。逆に、テーブル内の行のチェックボックスをオンにすると、グラフに関連する線が表示されます。

[ロックの分析情報] テーブル

テーブルのデータをフィルタするには、次の操作を行います。

  1. [フィルタ] の横にあるテキスト ボックスをクリックします。

  2. プロパティを選択し、演算子を選択して値を指定します。

フィルタに一致するデータがテーブルに表示されます。

ロック リクエストのサンプルを確認する

[ロック リクエストのサンプル] パネルには、競合するトランザクションからのサンプル ロック リクエストが表示されます。

行範囲の開始キーのロック リクエストのサンプル情報を表示するには、テーブル内の関連するリンクをクリックします。

テーブルに次の情報の列が表示されます。

  • サンプルの列名: 行キーの範囲でロックの競合が発生した列。
  • ロックモード: リクエストされたロックモード
  • トランザクションの表示: [トランザクション分析情報] ページへのリンク。ロックの競合している可能性のあるトランザクションが表示されます。

[ロック分析情報] の詳細ページ

トランザクションの分析情報を使用して競合するトランザクションを特定する

[トランザクション分析情報] ダッシュボードでは、インスタンスまたは選択したデータベースのトランザクションのレイテンシを確認できます。これは、ロックの競合による高レイテンシの原因となっている可能性のあるトランザクションを特定するうえで役立ちます。

トランザクションのレイテンシを確認する

トランザクションのレイテンシを確認する手順は次のとおりです。

  1. 左側のナビゲーションで [トランザクション分析情報] をクリックします。

  2. 上部の [データベース] セレクタから、ロックの待機時間が最も長いデータベースを選択します。

    または、[ロックの分析情報] ダッシュボードで [取引の表示] をクリックして、特定のサンプル列に対して読み取りまたは書き込みを行うトランザクションをフィルタリングします。

    表示されるデータは、[トランザクション分析情報] ダッシュボードの右上隅にあるタイムセレクタにデフォルトで 1 hour が表示されているものです。

ダッシュボードには、次のグラフが表示されます。

  • [平均レイテンシ(すべてのトランザクション)] グラフには、インスタンス内のすべてのトランザクションのレイテンシが表示されます。

  • [平均レイテンシ(トランザクションごと)] グラフには、選択したデータベースの各トランザクションのレイテンシが表示されます。

[トランザクション分析情報] ダッシュボード

トランザクション データを分析する

グラフの下のテーブルにある各トランザクションのデータを確認して分析できます。このテーブルには、SPANNER_SYS.TXN_STATS システム テーブルの指標データが次の列に表示されます。

  • フィンガープリント: トランザクション タグのハッシュ(存在する場合)。存在しない場合、ハッシュはトランザクションに関連するオペレーションに基づいて計算されます。この値は、[トランザクション詳細] ページに移動するリンクです。
  • トランザクション タグ: トランザクションにおけるオプションのトランザクション タグ。同じタグ文字列を持つ複数のトランザクションの統計情報のデータが、そのタグ文字列に一致する TRANSACTION_TAG ラベルがある 1 行にまとめられます。
  • 影響を受けるテーブル: トランザクションの影響を受けるテーブル。
  • Table.column 読み取り: トランザクションが読み取った列。
  • Table.column Written: トランザクションが書き込んだ列。
  • 平均レイテンシ(秒): トランザクションの実行にかかった平均秒数。デフォルトでは、テーブルはこの列の降順で並べ替えられます。

[平均レイテンシ(トランザクションごと)] グラフのデータをテーブル内のデータと関連付けるには、グラフ上の線を選択します。テーブル内の対応する行がハイライト表示されます。

テーブルのデータをフィルタするには、次の操作を行います。

  1. [フィルタ] の横をクリックします。

  2. プロパティを選択し、演算子を選択して値を指定します。

フィルタに一致するデータがテーブルに表示されます。

[トランザクションの分析情報] のテーブル

トランザクションの詳細情報を確認する

トランザクションの詳細情報(レイテンシが最も高いものなど)を表示するには、表内の各行の [フィンガープリント] リンクをクリックします。

[トランザクション詳細] ページが表示されます。上部の詳細テーブル以外に次の情報が表示されます。

  • 次の各指標の数値が表示されるバー。

    • 平均バイト数: トランザクションによって書き込まれた平均バイト数。
    • 平均レイテンシ: トランザクションの最初のオペレーションから commit または中断までにかかった平均秒数。
    • 平均 commit レイテンシ: commit オペレーションの実行にかかった平均秒数。
    • 総試行回数: トランザクションの試行回数の合計。
    • 総中止回数: 中止されたトランザクションの合計試行回数(トランザクションの commit メソッドを呼び出す前に中止されたものを含む)。
  • これらの値が表示されるグラフ。

    また、[平均参加者数] グラフには、各 commit 試行の平均参加者数が表示されます。

[トランザクション分析情報] の詳細ページ

トランザクションの状態を最適化してレイテンシを短縮できるかどうかを調べます。ロックの競合を減らすためのおすすめの方法を検討します。

次のステップ