在 Azure Database for PostgreSQ... 笔记

在 Azure Database for PostgreSQL 中理解并恢复 DELETE 操作后的存储空间

PostgreSQL 的多版本并发控制(MVCC)允许读者和写者同时操作而互不阻塞。当行被删除时,PostgreSQL 将其标记为死元组(dead tuples),而非从磁盘上物理移除。这确保了正在进行的事务的数据一致性,但表文件大小保持不变。因此,即使逻辑行数量减少,Azure Monitor 存储图表仍会显示高消耗。由更新操作创建的旧行版本也会占用空间,直到没有任何活跃事务需要它们为止。死元组(即过时的行版本)可能累积,需要通过 VACUUM 操作进行清理。频繁的数据修改可能导致表和索引膨胀。标准 VACUUM 可回收内部空间以供重用,但不会缩小表文件。VACUUM FULL 会将表重写为紧凑文件,从而物理缩小它们,但需要独占锁。pg_repack 提供了一种对表和索引进行压缩且阻塞性更低的替代方案。分区是一种主动管理历史数据的方法,通过删除整个分区而非单个行来实现。查询完成后,临时文件产生的未使用空间会自动回收。Azure Database for PostgreSQL Flexible Server 允许增加存储,但不允许减少。存储费用基于预留容量计算,因此删除数据不会自动降低账单。最佳实践包括批量删除、监控关键指标、使用分区以及对存储容量进行主动规划。