Skip to content

Memory Duty

PostgreSQL 的内存管理:

  1. MemoryContext:管内存数据。核心是“管理生命周期”,专供解析、运行所需临时数据,靠树形结构批量释放。
  2. Buffer Manager:管磁盘数据。核心是“缓存数据”,例如用 LRU 等算法把热点页留在内存,解决 IO 慢的问题。
  3. ResourceOwner:管资源归属。核心是“谁申请、谁负责释放”,用于跟踪事务/子事务持有的资源(如 buffer pin、锁、临时文件等),在事务结束或出错时统一回收,保证不会泄漏。
维度 MemoryContext Buffer Manager ResourceOwner
本质定义 生命周期管理器 数据缓存(通常进程间共享) 资源归属与释放控制器
服务对象 CPU / 计算逻辑 磁盘 / 持久化存储 事务 / 执行过程
核心关注 时间维度(生命周期) 价值维度(热点数据) 所有权维度(谁持有资源)
数据性质 易失;临时副本、中间结果、解析树等 持久代理;数据、日志、clog等 资源句柄(lock、buffer pin、fd 等)
管理机制 树形结构;批量操作 数组+算法;随机访问 栈/树结构(嵌套事务);数组记录资源
分配策略 弹性增长;按需分配 刚性限制;按需淘汰 显式登记;remember / forget
清理方式 批量清零 (Reset) 精细淘汰 (LRU/Clock) 按作用域释放(事务结束统一释放)
典型实现 AllocSet, Generation, Slab Shared Buffers, Temp Buffers, WAL Buffers TopTransactionResourceOwner