

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 维护 Amazon RDS 和 Amazon Aurora 中的 PostgreSQL 数据库活动，以避免性能问题
<a name="introduction"></a>

*Anuradha Chintha、Rajesh Madiwale 和 Srinivas Potlachervoo，Amazon Web Services（AWS）*

*2025 年 8 月*（[文档历史记录](doc-history.md)）

Amazon Aurora PostgreSQL 兼容版数据库服务或 Amazon Relational Database Service（Amazon RDS）for PostgreSQL 数据库服务是 PostgreSQL 数据库的完全托管型关系数据库服务。这些托管服务使数据库管理员能够从许多维护和管理任务中解放出来。但是，某些维护任务（例如 `VACUUM`）需要根据您的数据库使用情况进行密切监控和配置。本指南介绍了 Amazon RDS 和 Aurora 中的 PostgreSQL 维护活动。

## 目标业务成果
<a name="targeted-business-outcomes"></a>

数据库性能是衡量企业成功与否的关键指标。在兼容 Aurora PostgreSQL 的数据库和 Amazon RDS for PostgreSQL 数据库上执行维护活动可带来以下益处：
+ 帮助实现最佳查询性能
+ 腾出膨胀的空间，以便未来的事务重复使用
+ 防止事务循环操作 
+ 帮助优化程序生成良好的计划
+ 确保适当使用索引

## 多版本并发控制（MVCC）
<a name="mvcc"></a>

PostgreSQL 数据库维护需要了解 PostgreSQL 的机制：*多版本并发控制（MVCC）*。当数据库中同时处理多个事务时，MVCC 能确保保持原子性和隔离性，这是原子性、一致性、隔离性、持久性（ACID）事务的两个特性。在 MVCC 中，每次写入操作都会生成数据的新版本，并存储之前的版本。读取器和写入器不会互相妨碍。当事务读取数据时，系统会选择其中一个版本来提供事务隔离功能。PostgreSQL 和一些关系数据库使用 MVCC 的改编版，称为*快照隔离（SI）*。例如，Oracle 通过使用回滚段来实施 SI。在写入操作过程中，Oracle 将数据的旧版本写入回滚段，并用新版本的数据覆盖原有的数据区域。PostgreSQL 数据库通过使用*可见性检查规则*评估版本来实施 SI。将新数据放入表页面时，PostgreSQL 会使用这些规则为读取操作选择适当的数据版本。

修改表行中的数据时，PostgreSQL 使用 MVCC 来维护该行的多个版本。在对表进行 `UPDATE` 和 `DELETE` 操作期间，数据库会保留旧版本的行，供其他正在运行的事务使用，这些事务可能需要一致的数据视图。这些旧版本被称为*死行*（*元组*）。死元组的集合会产生膨胀。数据库中出现大量膨胀可能会引发一系列问题，比如查询计划生成效率低下、查询速度变慢以及存储较旧版本数据所使用的磁盘空间增加。

消除膨胀并保持数据库的正常运行需要定期进行维护，这些维护活动包括以下内容，将在后续部分中进行详细阐述：
+ [自动清理和分析表格](autovacuum.md)
+ [手动清理和分析表格](manual-vacuum.md)
+ [使用 pg\_repack 移除膨胀](pg-repack.md)
+ [重建索引](reindex.md)