トランザクション ID のラップアラウンドを防ぐ

Cloud SQL の高トランザクション ID 使用率 Recommender は、Cloud SQL PostgreSQL インスタンスでトランザクション ID ラップアラウンドを回避するための推奨事項をプロアクティブに生成します。

Cloud SQL インスタンスがトランザクション ID ラップアラウンドの問題に近づいている場合に、この推奨事項を適用できます。このページでは、Cloud SQL の高トランザクション ID 使用率 Recommender の仕組みと使用方法について説明します。

仕組み

トランザクション ID は、トランザクションの開始時に割り当てられ、バキュームされるまで凍結されます。トランザクション ID 使用率は、最大トランザクション数(20 億)に対する、バキュームされていないトランザクション数(「割り当て数」から「凍結数」を引いたもの)の割合です。デフォルトの PostgreSQL 設定では、バキューム処理が最適に、かつ中断することなく実行された場合、リージョンのトランザクション ID 使用率は 10% 前後になるのが一般的です。バキュームよりも定期的なワークロードが優先されることが多い高負荷のデータベースでは、トランザクション ID の使用率が高くなることがあります。トランザクション ID の使用率が非常に高い値(80% 以上)になる傾向がある場合、データベースでトランザクション ID が枯渇する可能性があります。トランザクション ID の使用率が 100% に達することを、トランザクション ID ラップアラウンドと呼びます。トランザクション ID の使用率が 100% に達すると、PostgreSQL では書き込みクエリの受け入れが停止されます。

Cloud SQL の高トランザクション ID 使用率 Recommender によって、Cloud SQL PostgreSQL インスタンスのトランザクション ID 使用率が分析されます。

トランザクション ID 使用率が 80% 以上の場合は、トランザクション ID ラップアラウンドを回避するための措置を取ることが推奨されます。

料金

Cloud SQL の高トランザクション ID 使用率 Recommender は、標準の Recommender の料金ティアに含まれています。

始める前に

推奨事項と分析情報を表示するには、事前に次の手順を行う必要があります。

  • 分析情報と推奨事項を表示、操作する権限を取得するには、必要なロールが必要です。
    タスク ロール
    推奨事項を表示する recommender.cloudsqlViewer または cloudsql.viewer のいずれかのロール。
    推奨事項を適用する recommender.cloudsqlAdmincloudsql.editorcloudsql.admin のいずれかのロール。
    ロールの詳細については、ロールについてIAM 権限の付与をご覧ください。
  • Enable the Recommender API.

    Enable the API

インスタンスのパフォーマンス改善の推奨事項を一覧表示する

インスタンスのパフォーマンス改善に関する推奨事項を一覧取得するには、Google Cloud コンソール、gcloud CLI、または Recommender API を使用します。

インスタンスのパフォーマンス改善に関する推奨事項は、トランザクション ID ラップアラウンドに近づいているインスタンスがある場合にのみ表示されます。

コンソール

Google Cloud コンソールを使用してインスタンスのパフォーマンスに関する推奨事項を一覧取得する手順は次のとおりです。

  1. Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. [トランザクション ID ラップアラウンドの防止] の推奨事項バナーで [すべて表示] をクリックします。

または、次の方法を行います。

  1. [おすすめハブ] に移動します。おすすめハブのスタートガイドもご覧ください。

    おすすめハブに移動

  2. [Cloud SQL インスタンスのパフォーマンスを向上させる] カードで、[すべて表示] をクリックします。

  3. [トランザクション ID ラップアラウンドの防止] の推奨事項があるインスタンスを選択します。

gcloud CLI

gcloud CLI を使用してインスタンスのパフォーマンス改善に関する推奨事項を一覧表示するには、次のように gcloud recommender recommendations list コマンドを実行します。

gcloud recommender recommendations list \
--project=PROJECT_ID \
--location=LOCATION \
--recommender=google.cloudsql.instance.PerformanceRecommender \
--filter=recommenderSubtype=POSTGRES_HIGH_TRANSACTION_ID_UTILIZATION_BEST_PRACTICE

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • LOCATION: us-central1 などのリージョン。

API

Recommendations API を使用してインスタンスのパフォーマンス改善に関する推奨事項を一覧表示するには、次のように recommendations.list メソッドを呼び出します。

GET https://recommender.googleapis.com/v1beta1/projects/PROJECT-ID/locations/LOCATION/recommenders/google.cloudsql.instance.PerformanceRecommender.PostgresHighTransactionIdUtilizationBestPractice/recommendations

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • LOCATION: us-central1 などのリージョン。

Recommender は、トランザクション ID 使用率が高いインスタンスを検出すると、それを他のパフォーマンス推奨事項とともにテーブルに一覧表示します。各行には、インスタンス ID、簡単な推奨事項、データベース エンジン、ロケーション、最終更新日が表示されます。

分析情報と詳細な推奨事項を表示する

トランザクション ID ラップアラウンドに近づく傾向のあるインスタンスに関する分析情報と詳細な推奨事項を表示するには、Google Cloud コンソール、gcloud CLI、または Recommender API を使用します。

コンソール

Google Cloud コンソールを使用して、パフォーマンスしきい値に近いインスタンスの分析情報と詳細な推奨事項を表示するには、インスタンスのリストにある推奨事項リンクをクリックします。

gcloud CLI

gcloud CLI を使用して、パフォーマンスしきい値に近いインスタンスの分析情報と詳細な推奨事項を表示するには、次のように gcloud recommender insights list コマンドを実行します。

gcloud recommender insights list \
--project=PROJECT_ID \
--location=LOCATION \
--insight-type=google.cloudsql.instance.PerformanceInsight \
--filter=insightSubtype=POSTGRES_HIGH_TRANSACTION_ID_UTILIZATION

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • LOCATION: us-central1 などのリージョン。

API

Recommendations API を使用して、パフォーマンスしきい値に近いインスタンスの分析情報と詳細な推奨事項を表示するには、次のように insights.list メソッドを呼び出します。

GET https://recommender.googleapis.com/v1beta1/projects/PROJECT-ID/locations/LOCATION/insightTypes/google.cloudsql.instance.PerformanceRecommender.PostgresHighTransactionIdUtilization/insights

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • LOCATION: us-central1 などのリージョン。

次の表に、Cloud SQL の高トランザクション ID 使用率 Recommender が生成する分析情報と推奨事項を示します。サブタイプは、gcloud CLI と API の結果に表示されます。

分析情報 推奨事項
このインスタンスのトランザクション ID の使用率は高く、100% に近い状態です。
サブタイプ: POSTGRES_HIGH_TRANSACTION_ID_UTILIZATION
Cloud SQL インスタンスでのトランザクション ID ラップアラウンドを回避してください。
サブタイプ: POSTGRES_HIGH_TRANSACTION_ID_UTILIZATION_BEST_PRACTICE

推奨事項を適用する

推奨事項を慎重に評価し、以下のいずれかを行います。

インスタンスのパフォーマンスを最適化する

インスタンスのトランザクション ID ラップアラウンドの問題を解決するには、次の操作を行います。

  1. ラップアラウンドの原因となっているデータベースとテーブルを特定します。

  2. データベース インスタンスのトランザクション ID 使用率の指標を調べて解釈します。

  3. スタックしたトランザクション ID を確認します。

  4. VACUUM の阻害要因を取り除きます。

  5. VACUUM の速度を確認して加速します。

詳細については、ブログ投稿 Cloud SQL for PostgreSQL における VACUUM を使用したトランザクション ID の凍結の高速化もご覧ください。

トランザクション ID のラップアラウンドを防ぐ

インスタンスのトランザクション ID ラップアラウンドを防ぐには、次のコマンドを実行します。

SELECT * FROM google_vacuum_mgmt.pg_fix_wraparound();

出力例:

postgres=> select * from google_vacuum_mgmt.pg_fix_wraparound();
-[ RECORD 1 ]-----+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
issue_description | Gemini has detected an open prepared transaction on your instance which is blocking vacuum. Monitor the transaction ID utilization and commit or rollback the transaction, as needed.
query             | ROLLBACK PREPARED 'trx_id_pin'; or COMMIT PREPARED 'trx_id_pin';
recommendation    | To commit a prepared transaction, you must be connected as the same user that originally executed the transaction: postgres
insights          | Transaction ID Utilization: 88.49%

次のステップ