在 Postgresql 中,内存大概被分为两块
-
Local memory area:为每一个 backend process 分配的内存
-
Shared memory area:PostgreSQL server 所有的 backgroud process 使用的内存
Local memory area
每一个backend process 都会分配一块local memory area, 每一块区域又分为三个子区域 ,见下表
sub-area | description |
---|---|
work_mem | 用户在 sort、distinct、merge join、hash join 的时候会用到这块区域 |
maintenance_work_mem | vacuum、reindex、create index 等操作会用到这块区域 |
temp_buffers | 存储临时表会用到这块区域 |
Shared memory area
这块区域在服务器启动的时候分配,这块区域也是分为好几个子区域,见下面介绍
sub-area | description |
---|---|
shared buffer pool | 将表或者索引的 page 从磁盘加载到 shared buffer,然后在shared buffer 操作 |
WAL buffer | 在服务端出现问题的时候,确保数据不会丢失,在写到磁盘之前,wal buffer 是 wal log 的缓存区域 |
commit log | 为了并发控制所有事物的状态的保持而分配的区域 |
另外,Postgresql 还分配一些其他的内存区域:
-
为访问控制分配的子区域,比如轻量级锁,共享或者专有锁。
-
为其他 backgroud process 提供的子区域,比如检查点、vacuum。
-
为事物处理提供的子区域,比如事物中的保存点,和二阶段事物提交。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31490526/viewspace-2716598/,如需转载,请注明出处,否则将追究法律责任。