このページでは、Spanner が提供するレイテンシの指標について説明します。アプリケーションのレイテンシが高い場合は、この指標を使用して診断を行い、問題を解決します。
これらの指標は、 Google Cloud コンソールと Cloud Monitoring コンソールで確認できます。
レイテンシ指標の概要
Spanner のレイテンシ指標は、Spanner サービスがリクエストの処理にかかった時間を測定します。この指標は、Spanner が使用した CPU 時間でなく、実際の経過時間を収集します。
このレイテンシ指標には Spanner 以外で発生したレイテンシは含まれません。ネットワークのレイテンシや、アプリケーション レイヤー内のレイテンシは含まれません。このようなレイテンシを測定するには、Cloud Monitoring を使用し、アプリケーションにカスタム指標を設定します。
レイテンシ指標のグラフは、Google Cloud コンソールと Cloud Monitoring コンソールで確認できます。読み取りと書き込みの両方を含むレイテンシを表示することも、読み取りと書き込みのレイテンシを個別に表示することもできます。
Spanner は、各リクエストのレイテンシに基づいてリクエストをパーセンタイルにグループ化します。レイテンシ指標は 50 パーセンタイルと 99 パーセンタイルで確認できます。
- 50 パーセンタイルのレイテンシ: 最も処理時間の短いリクエストの 50% の最大レイテンシ(秒)。たとえば、50 パーセンタイルのレイテンシが 0.5 秒の場合、Spanner は、50% のリクエストを 0.5 秒未満で処理しています。 - この指標は、中央値のレイテンシともいわれます。 
- 99 パーセンタイルのレイテンシ: 最も処理時間の短いリクエストの 99% の最大レイテンシ(秒)。たとえば、99 パーセンタイルのレイテンシが 2 秒の場合、Spanner は、99% のリクエストを 2 秒未満で処理しています。 
1 秒あたりのレイテンシとオペレーション
インスタンスが一定の期間内に少数のリクエストを処理している場合、50 パーセンタイルや 99 パーセンタイルのレイテンシでは、インスタンス全体のパフォーマンスを表す指標としては意味がありません。このような状況では、非常に少数の外れ値でレイテンシ指標が大幅に変化する可能性があります。
たとえば、インスタンスが 1 時間に 100 リクエストを処理しているとします。この場合、1 時間の 99 パーセンタイルのレイテンシは、最も遅いリクエストの処理時間になります。1 つのリクエストに基づくレイテンシの測定は意味がありません。
レイテンシ問題の診断方法
以降のセクションでは、アプリケーション全体のレイテンシが高くなる一般的な問題の診断方法について説明します。
インスタンスのレイテンシ指標は、Google Cloud コンソールで簡単に確認できます。指標を詳しく分析し、レイテンシと他の指標の相関関係を調べる場合には、Cloud Monitoring コンソールを使用します。
全体のレイテンシが高く、Spanner のレイテンシが低い場合
アプリケーションのレイテンシが想定より高く、Spanner のレイテンシ指標が全体のレイテンシをかなり下回っている場合は、アプリケーション コードに問題がある可能性があります。アプリケーションのパフォーマンスが低下し、一部のコードパスの処理速度が遅くなると、各リクエストの全体のレイテンシが増加する可能性があります。
この問題を確認するには、アプリケーションのベンチマークを取り、想定以上に遅いコードパスを特定します。
また、Spanner と通信を行うコードをコメントアウトし、全体のレイテンシを再度測定することもできます。全体のレイテンシに大きな変化が見られない場合は、Spanner が高レイテンシの原因とは考えられません。
全体のレイテンシが高く、Spanner のレイテンシも高い場合
アプリケーションのレイテンシが想定より高く、Spanner のレイテンシ指標も高い場合は、いくつかの原因が考えられます。
- インスタンスにより多くのコンピューティング容量が必要です。インスタンスの CPU リソースが不足し、CPU 使用率が推奨の最大値を超えている場合、Spanner がリクエストを迅速かつ効率的に処理できなくなります。 
- 一部のクエリが原因で CPU 使用率が高くなっている。クエリ パラメータやセカンダリ インデックスなど、処理効率を改善する Spanner 機能をクエリで使用できない場合や、非常に多くの結合や CPU 使用率の高いオペレーションがクエリに含まれている場合、インスタンスに割り当てられた CPU リソースの大半をクエリが使用している可能性があります。 
この問題を確認するには、Cloud Monitoring コンソールを使用して CPU の高使用率と高レイテンシの相関関係を分析します。また、インスタンスのクエリ統計で、同じ期間に CPU 使用率が高いクエリが実行されているかどうか確認します。
同じ期間に CPU 使用率とレイテンシの両方が高い場合は、次の操作を行って問題を解決します。
- CPU 使用率の高いクエリが多くない場合は、インスタンスにコンピューティング容量を追加します。 - コンピューティング容量を追加すると、CPU リソースが増加し、Spanner でより多くのワークロードを処理できるようになります。 
- CPU 使用率の高いクエリがある場合は、クエリ実行プランを確認して、クエリの処理が遅い理由を特定します。Spanner に関する SQL のベスト プラクティスの説明に従ってクエリを更新します。 - 必要であれば、データベースのスキーマ設計を見直し、クエリが効率的に処理されるようにスキーマを更新します。 
次のステップ
- Google Cloud コンソール または Cloud Monitoring コンソールを使用してインスタンスをモニタリングします。
- 高レイテンシと他の指標の相関分析を行う方法を学習する。
- SQL のベスト プラクティスとタイムスタンプの範囲を使用してレイテンシを低減する方法を学習する。
- SQL ステートメントを使用して、クエリ統計テーブルでレイテンシを確認する。
- インスタンスの構成がレイテンシに及ぼす影響を理解する。