PostgreSQL Autovacuum Internals and Benchmark
a day ago
- 自动清理对于PostgreSQL性能和数据库生存至关重要;必须正确调整以避免性能下降。
- MVCC维护多个行版本;清理回收对任何事务不再可见的死元组。
- 自动清理启动器按数据库启动工作进程;工作进程根据死元组和插入的阈值独立清理符合条件的表。
- 清理使用可见性映射跳过没有死元组的页面,从而高效运行;缓冲区环限制了对缓存的影响。
- 索引清理需要每个清理周期对每个索引进行全面扫描;有限的工作内存可能导致多次扫描,增加成本。
- 自动清理的成本由脏页(包含死元组的页面)数量驱动,而不是死元组本身的计数。
- 基准测试表明,索引线性放大清理成本;死元组的紧凑分布比分散分布导致更低的成本。
- 并发操作通过页面级锁定处理,清理不会阻塞正常的DML,除了短暂的清理锁。