暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL 学习笔记018 —— PostgreSQL 内存结构

心有阳光 2023-01-13
933

Postgresql 内存结构

PostgreSQL的内存主要分成两类:

  1. 本地内存区域:每个后端进程(backend process)自己使用的
  2. 共享内存区域:所有进程共同使用

本地内存区域

在postgresql中,每个后端进程(backend process)分配一片本地内存用于处理查询处理;

本地内存又分成子内存区域

work_mem

执行器使用work_mem区域用于对元组的排序,比如order by、distinct操作。也用于表的join操作,比如merge-join、hash-join操作

有参数work_mem控制,默认是4MB。

参数log_temp_files会控制记录临时文件名和大小。可以为排序、散列和临时查询结果创建临时文件。如果通过此设置启用,则在删除每个临时文件时将为其发出一个日志条目。当值为0时,记录所有临时文件信息;当值为正时,只记录大小大于或等于指定数据量的文件。如果指定此值时没有使用单位,则将其作为kb。默认设置是-1,它禁用这样的日志记录。只有超级用户才能更改此设置。

设置建议:

–从较小的值开始

–然后看看日志中的“temporary file”相关信息

–设置成temp文件的2-3倍

maintenance_work_mem

用于一些维护操作。比如vacuum、reindex、alter table add foreign key

由参数maintenance _work_mem控制大小。默认是64MB。由于数据库会话一次只能执行其中的一个操作,并且PostgreSQL不会同时运行许多操作,因此可以将maintenance_work_mem的值设置为明显大于work_mem的值。

设置建议:

–RAM*10%,最大不超过1GB

–如果vacuum有问题,可以设置的再大一点。

temp_buffers

存放临时表。temp_buffer参数控制。默认是8MB。

该参数设置每个数据库会话使用的临时缓冲区的最大数量。会话本地缓冲区仅用于访问临时表。可以在单个会话中更改此参数的设置,但只能在会话中首次使用临时表之前更改。

PostgreSQL利用这个内存区域来保存每个会话的临时表,当连接关闭时,这些临时表将被清除。

共享内存区域

shared buffer

PostgreSQL将表和索引中的页面从持久存储加载到共享缓冲池中,然后直接对它们进行操作。

由参数shared_buffers控制,默认是128MB。

wal buffer

存放wal数据

commit log

提交日志(CLOG)保存所有事务的状态,是并发控制机制的一部分。提交日志分配共享内存,并在整个事务处理过程中使用。

事务有以下四种状态:

in_progress、commited、aborted、sub-commited

最后修改时间:2023-01-13 21:36:15
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论