Memory Size Matters to PostgreSQL
a year ago
- #Memory Management
- #PostgreSQL
- #Database Performance
- PostgreSQL的共享缓冲区是用于管理数据区与后端之间数据流的内存段。
- PostgreSQL的缓冲区管理算法从LRU演进到ARC,再到2q,最终采用时钟扫描算法。
- 时钟扫描算法通过名为nextVictimBuffer的循环缓冲区和自旋锁buffer_strategy_lock来管理缓冲区替换。
- 缓冲区使用计数器在被固定时递增,这将影响淘汰决策。
- VACUUM或大型顺序扫描等批量操作使用小型环形缓冲区,以避免影响共享缓冲区。
- PostgreSQL建议将shared_buffer设置为系统内存的25%,上限不超过40%。
- 大容量共享缓冲区的性能取决于数据区是否能完全装入共享缓冲区。
- 现代DDR4内存吞吐量会影响完整扫描共享缓冲区所需的时间。
- shared_buffer的实用上限约为64GB,以避免性能回退。
- 在生产环境中调整默认的shared_buffer设置对获得最佳性能至关重要。