避免事务 ID 回卷

Cloud SQL 高事务 ID 利用率 Recommender 会主动生成建议,以帮助您避免 Cloud SQL PostgreSQL 实例的潜在事务 ID 回卷。

当 Cloud SQL 实例出现事务 ID 回卷问题趋势时,您可以应用此建议。本页面介绍了 Cloud SQL 高事务 ID 利用率 Recommender 的工作原理和使用方法。

工作原理

事务开始时分配事务 ID,并且 ID 会冻结,直到事务清空。事务 ID 利用率是未清空事务的数量(已分配的数量减去冻结的数量),表示为最大值 20 亿的分数。在默认 PostgreSQL 设置下,如果清空流程以最佳方式执行,并且不会出现中断情况,则大多数数据库的事务 ID 利用率约为 10%。在繁忙的数据库中,事务 ID 利用率水平可能会高于常规数据库,而常规工作负载通常优先于清空。如果事务 ID 利用率趋向于非常高的值(80% 或更多),则数据库可能会面临事务 ID 耗尽风险。达到 100% 的事务 ID 利用率称为事务 ID 回卷。事务 ID 利用率百分比达到 100% 后,PostgreSQL 将停止接受写入查询。

Cloud SQL 高事务 ID 利用率 Recommender 会分析 Cloud SQL PostgreSQL 实例上的事务 ID 利用率。

如果事务 ID 利用率百分比大于或等于 80%,建议您采取措施以避免事务 ID 回卷。

价格

Cloud SQL 高事务 ID 利用率 Recommender 为标准 Recommender 价格层级

准备工作

在查看建议和数据分析之前,请执行以下操作:

  • 如需获得查看和使用数据分析和建议的权限,请确保您拥有所需的角色
    任务 角色
    查看建议 以下角色之一:recommender.cloudsqlViewercloudsql.viewer
    采纳建议 以下角色之一:recommender.cloudsqlAdmincloudsql.editorcloudsql.admin
    如需详细了解角色,请参阅了解角色授予 IAM 权限
  • 启用 Recommender API。

    启用 API

列出“改进实例性能”建议

您可以使用 Google Cloud 控制台、gcloud CLI 或 Recommender API 列出“改进实例性能”建议。

仅当您的实例接近事务 ID 回卷时,系统才会显示改进实例性能建议。

控制台

如需使用 Google Cloud 控制台列出有关实例性能的建议,请按照以下步骤操作:

  1. 转到 Cloud SQL 实例页面。

    打开“Cloud SQL 实例”

  2. 点击“避免事务 ID 回卷”建议横幅上的查看全部

或者,请按以下步骤操作:

  1. 转到 Recommendation Hub。另请参阅 Recommendation Hub 使用入门

    转到 Recommendation Hub

  2. Improve Cloud SQL Instance Performance(改进 Cloud SQL 实例性能)卡片中,点击查看全部

  3. 选择具有 Prevent transaction ID wraparound(避免事务 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、简要建议、数据库引擎、位置和上次刷新日期。

查看数据分析和详细建议

您可以使用 Google Cloud 控制台、gcloud CLI 或 Recommender API 查看有关接近事务 ID 回卷的实例的分析洞见和详细建议。

控制台

如需使用 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 回卷,并遵循相关建议。

  • 如需忽略建议,使其被取消突出显示并呈灰显状态,请点击忽略

  • 如需关闭面板而不应用或忽略建议,请点击取消

优化实例的性能

如需解决实例的事务 ID 回卷问题,请执行以下操作:

  1. 找到导致回卷的数据库和表。

  2. 探索并解读数据库实例上的事务 ID 利用率指标。

  3. 检查事务 ID 是否卡住。

  4. 移除 VACUUM 障碍。

  5. 检查并加快 VACUUM 速度。

如需了解详情,另请参阅使用 VACUUM 加快 Cloud SQL for PostgreSQL 中的事务 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%

后续步骤