PostgreSQL的内存结构分为两种不同的类型,它们分别是本地内存和共享内存。它们的关系如下图所示:

![]() |
|---|
| 点击这里查看视频讲解:【赵渝强老师】PostgreSQL的内存结构 |
一、 本地内存
PostgreSQL的本地内存是指每个后台进程(backend process)自己使用的内存区域,下面列举了PostgreSQL中的本地内存以及它们的作用。
- work_mem
使用work_mem区域用于对数据的排序,比如order by、distinct操作,也用于表的join操作,比如merge-join、hash-join操作。该区域的大小由参数work_mem控制,默认值是4MB。
- maintenance_work_mem
该内存区域用于一些维护操作,比如vacuum、reindex、alter table add foreign key等操作。它由参数maintenance_work_mem控制大小,默认值是64MB。由于数据库会话一次只能执行其中的一个操作,并且PostgreSQL不会同时运行许多操作,因此可以将maintenance_work_mem的值设置为明显大于work_mem的值。
- temp_buffers
该区域存放临时表的数据,由temp_buffer参数控制,默认值是8MB。该参数设置每个数据库会话使用的临时缓冲区的最大数量。PostgreSQL允许在单个会话中更改此参数的设置,但只能在会话中首次使用临时表之前进行更改。PostgreSQL利用这个内存区域来保存每个会话的临时表。当连接关闭时,该区域的数据将被自动清除。换句话说,临时表的数据将被清除。
二、 共享内存
PostgreSQL的共享内存是指每个后台进程(backend process)共同使用的内存区域,下面列举了PostgreSQL中的共享内存以及它们的作用。
- shared_buffer
PostgreSQL将表和索引中的数据块从持久存储加载到共享缓冲池中,然后直接对它们进行操作,从而提高效率。该区域的大小由参数shared_buffers控制,默认值是128MB。
- wal_buffer
存放WAL日志数据。该区域的大小由参数wal_buffers控制,默认值是4MB。
- effective_cache_size
该区域用于存储数据库优化器的相关数据。当前的数据库服务器可以提供额外的缓存空间时,如:内存的缓存空间、文件系统的缓存空间、CPU的缓存空间等,使用参数effective_cache_size可以控制这些缓存空间的总和。

















