首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【赵渝强老师】PostgreSQL的内存结构

【赵渝强老师】PostgreSQL的内存结构

原创
作者头像
赵渝强老师
发布2025-10-27 15:45:45
发布2025-10-27 15:45:45
1230
举报

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可以控制这些缓存空间的总和。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 本地内存
  • 二、 共享内存
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档