CPU 使用率の指標

このページでは、Cloud Spanner が提供する CPU 使用率の指標について説明します。これらの指標は、Google Cloud Console および Stackdriver Monitoring コンソールで確認できます。

CPU 使用率とタスク優先度

Cloud Spanner で CPU 使用率を測定する際には、タスクが次のカテゴリに分類されます。

ユーザータスク システムタスク
高い優先度 優先度の高いユーザータスク 優先度の高いシステムタスク

アプリケーションによって開始され、Cloud Spanner によって高い優先度として処理されるタスク。

ほとんどの読み取りリクエストおよび commit リクエストが該当します。バッチ書き込みの一部の処理も該当しますが、バッチ読み取りは該当しません。

Cloud Spanner によって開始され、高い優先度として処理されるタスク。

インデックスのバックフィルやデータ分割が該当します。

低い優先度 優先度の低いユーザータスク 優先度の低いシステムタスク

アプリケーションによって開始され、優先度の高いタスクほど早く完了する必要のないタスク。

バッチ読み取りやバッチクエリが該当します。バッチ書き込みの一部の処理も該当します。

Cloud Spanner によって開始され、優先度の高いタスクほど早く完了する必要のないタスク。

データベースの圧縮やスキーマ変更の検証が該当します。

優先度の高いタスクはすぐに優先度の低いタスクをプリエンプトします。Cloud Spanner では、必要に応じて優先度の低いタスクがすべて停止され、優先度の高いタスクが、最大で 100% の利用可能な CPU リソースを活用できます。優先度の低いシステムタスクは、短時間遅延する可能性がありますが、最終的には最適なパフォーマンスで実行する必要があります。したがって、十分なノードを持つインスタンスをプロビジョニングして、優先度の高いタスクと優先度の低いタスクの両方を処理する必要があります

優先度の高いタスクが存在しない場合、Cloud Spanner では、利用可能な CPU リソースを最大で 100% まで割り当てることによって、優先度の低いタスクをより迅速に完了するよう試みられます。バックグラウンドでの使用率の急上昇は、問題の兆候ではありません。優先度の低いタスクは、ユーザータスクなどの優先度の高いタスクがあれば、ほぼ即座に後回しにされます。

利用可能な指標

Cloud Spanner には、CPU 使用率の指標として次のものが用意されています。

  • 24 時間の稼働平均: データベースごとに、合計 CPU 使用率の稼働平均をインスタンスの CPU リソースの割合(%)で表したものです。各データポイントは過去 24 時間の平均を表します。
  • 高い優先度: 優先度の高いタスクの CPU 使用率をインスタンスの CPU リソースの割合(%)で表したものです。
  • 合計: 合計 CPU 使用率をインスタンスの CPU リソースの割合(%)で表したものです。

    インスタンスの場合、データベース別またはタスク優先度別に合計 CPU 使用率を確認できます。

    データベースの場合、タスク優先度別に合計 CPU 使用率を確認できます。

これらの指標のグラフは、Cloud Console または Stackdriver Monitoring コンソールで確認できます。また、後述の説明に沿って、Stackdriver Monitoring コンソールを使用して、高 CPU 使用率に関するアラートを作成することもできます。

次の表に、シングルリージョン インスタンスとマルチリージョン インスタンスの両方について、推奨される最大 CPU 使用率を示します。これらの数値を使用すると、ゾーン全体(シングルリージョン インスタンスの場合)またはリージョン全体(マルチリージョン インスタンスの場合)が消失したとしても、インスタンスでトラフィックの処理を続行できるだけの十分なコンピューティング能力が保証されます。

指標 シングルリージョン インスタンスの場合の最大値 マルチリージョン インスタンスの場合のリージョンあたりの最大値
高い優先度の合計 65% 45%
24 時間の平滑化された集計 90% 90%

推奨される最大値以下で維持するために、高い優先度 CPU 使用率と 24 時間の平均 CPU 使用率を追跡するアラートを Stackdriver Monitoring で作成します。

CPU 使用率は、リクエストのレイテンシに影響する可能性があります。個々のバックエンド サーバーが過負荷状態になると、リクエストのレイテンシが大きくなります。アプリケーションでベンチマークとアクティブなモニタリングを実行することによって、Cloud Spanner がパフォーマンス要件を満たしていることを確認する必要があります。

したがって、パフォーマンスの影響が大きいアプリケーションでは、次のセクションで説明する手法を使用して CPU 使用率をさらに低下させる必要がある場合があります。

CPU 使用率の低下

このセクションでは、インスタンスの CPU 使用率を低下させる方法について説明します。

通常は、まずインスタンスにノードを追加することをおすすめします。ノードを追加した後、CPU 使用率が高くなる根本原因を調べて対処できます。

ノードの追加

推奨される CPU 使用率の最大値を超える場合は、インスタンスにノードを追加して、インスタンスが引き続き効率よく動作するようにすることを強くおすすめします。このプロセスを自動化する場合は、UpdateInstance メソッドを使用することによって、CPU 使用率をモニタリングして、必要に応じてノードを追加または削除するアプリケーションを作成できます。

必要なノード数を判断するには、優先度の高い CPU 使用率のピークと 24 時間の平滑化された平均の両方を考慮します。CPU 使用率が推奨最大値を常に下回るように、十分な数のノードを割り当ててください。上記のとおり、パフォーマンスの影響が大きいアプリケーションでは、(ワークロードの急激な増加に対応するなどの目的で)ノードを余分に割り当てる必要がある場合があります。

ノード数が十分でない場合は、Cloud Spanner によって優先度順にタスクが延期されます。データベースの圧縮やスキーマ変更の検証などの優先度の低いシステムタスクは、ユーザータスクのために延期される可能性があります。しかし、これらのタスクもインスタンスの健全性に不可欠であるため、Cloud Spanner によって無期限に延期されることはありません。コンピューティング リソース不足のために、特定の時間枠内(数時間から 1 日程度)に優先度の低いシステムタスクを完了できない場合は、Cloud Spanner によりそれらのシステムタスクの優先度が上げられる場合があります。その場合、ユーザータスクのパフォーマンスに影響が生じます

クエリのパフォーマンスの最適化

SQL クエリの効率が想定より低いことが原因で、インスタンスの CPU 使用率が高くなる場合があります。データベースのクエリ統計を使用して、CPU 使用率が高いクエリを特定できます。その後、クエリプランに基づいて該当するクエリを最適化し、CPU 使用率を低下させることができます。

次のステップ