Fork me on GitHub

daydayup863

人生就像一杯茶,不会苦一辈子,但总会苦一阵子。

0%

PostgreSQL内存结构

在PostgreSQL内存结构中,主要分为本地缓冲区(Local Memory Area)和共享缓冲区(hared Memory Area)两部分, 本文主要介绍这两种缓冲区的功能。

本地缓冲区

当连接建立时, postgres都会为每一个backend process分配Local Memory Area,可以分为三个子区域, 如下表所示:

子区域GUC参数默认值描述
Work Memorywork_mem4MB指定在写到临时磁盘文件之前被内部排序操作和哈希表使用的内存量, ORDER BY、DISTINCT和归并连接都要用到排序操作。哈希连接、基于哈希的聚集以及基于哈希的IN子查询处理中都要用到哈希表。
Maintenance Work Memorymaintenance_work_mem64MB指定在维护性操作(如VACUUM,CREATE INDEX和ALTER TABLE ADD FOREIGN KEY等)中使用的最大的内存量。
Temp Bufferstemp_buffers8MB设置每个数据库会话使用的临时缓冲区的最大数目,只用于访问临时表。可以在独立的会话内部被改变,但是只有在会话第一次使用临时表之前才能改变, 在会话中随后企图改变该值是无效的。
Vacuum Buffersautovacuum_work_mem-1指定每个vacuum worker进程能使用的最大内存量。其默认值-1,表示使用maintenance_work_mem的值。这个设置对正在运行VACUUM的没有影响。

共享缓冲区

这块区域在服务器启动的时候分配

子区域参数默认值描述
Shared Buffersshared_buffers128MB设置数据库服务器将使用的共享内存缓冲区量。通常设置为25%-40%比较合适。默认block_size下,至少为128千字节(KB)
WAL Bufferswal_buffers16MB用于还未写入磁盘的 WAL 数据的共享内存量。默认值-1表示选择等于shared_buffers的1/32的尺寸(约3%),但是不小于64kB也不大于WAL段的尺寸(通常为16MB)。任何小于32kB的正值都将被当作32kB。
CLOG Buffers存储了所有表明事物提交状态的元数据。
Memory for Locks Spacemax_locks_per_transaction max_pred_locks_per_transaction64存储所有PostgreSQL实例所有heavyweight locks信息,这些锁信息被所有的background process和backend process共享。
-------------本文结束感谢您的阅读-------------
听说,打赏我的人都找到了真爱

欢迎关注我的其它发布渠道