合 PG体系结构之内存结构
内存结构
PostgreSQL的内存体系结构可以分为两大类:
- Local memory area 本地内存区域——由每个后端进程分配供自己使用。
- Shared memory area 共享内存区域——由PostgreSQL服务器的所有进程使用。
共享内存区域由PostgreSQL服务器在启动时分配。这个区域也被划分为几个固定大小的子区域。
PostgreSQL启动后,会生成一块共享内存,用于做数据块的缓冲区,以便提高读写性能。WAL日志缓冲区和Clog缓冲区也存在共享内存中,除此之外还有全局信息比如进程、锁、全局统计等信息也保存在共享内存中。
其中最重要的组成部分是Shared Buffer和WAL Buffer。
√ Shared Buffer Pool
PostgreSQL将表和索引中的页面从持久存储加载到这里,并直接操作它们。Shared Buffer的目的是减少磁盘IO。为了达到这个目的,必须满足以下规则∶
当需要快速访问非常大的缓存时(10G、100G等)
如果有很多用户同时使用缓存,需要将内容尽量缩小
频繁访问的磁盘块必须长期放在缓存中
对应的设置参数为:shared_buffers
12345678910C:\Users\lhrxxt>psql -U postgres -plhr -h192.168.66.35 -p 15432Password for user postgres:psql (13.3)Type "help" for help.postgres=# show shared_buffers;shared_buffers----------------128MB(1 row)
√ WAL Buffer
WAL Buffer是用来临时存储数据库变化的缓存区域。存储在WAL Buffer中的内容会根据提前定义好的时间点参数要求写入到磁盘的WAL文件中。为了保证数据不因服务器故障而丢失,PostgreSQL支持WAL机制。WAL data(也称XLOG records)是PostgreSQL中的事务日志;WAL buffer是WAL数据写入持久存储之前的缓冲区域。
在备份和恢复的场景下,WAL Buffer和WAL文件是极其重要的。