作者:瀚高PG实验室 (Highgo PG Lab)- 天蝎座
共享内存:
如上图所示,PG启动后,会生成一块共享内存,共享内存主要用做数据块的缓冲区,以便提高读写性能。WAL日志缓冲区和CLOG缓冲区也存在共享内存中。除此以外还有一些全局信息也保存在共享内存中,如进程信息、锁的信息、全据统计信息,等等。PG9.3之前的版本与oralce数据库一样,都是使用“System V”类型的共享内存,但到PG9.3之后,PG使用“mmap()”方式的共享内存。使用这种共享内存的好处是不再需要配置“System V”共享内存的内核参数“kernel.shmmax”和“kernel.shmall”,就能使用较大的共享内存。
本地内存:
后台服务进程除访问共享内存外,还会申请一些本地内存,以便暂存一些不需要全局存储的数据。这些内存缓冲区主要有以下几类:
① 临时缓冲区: 用于访问临时表的本地缓冲区
② work_mem: 内部排序操作和Hash表在临时磁盘文件之前使用的内存缓冲区。
③ maintenance_work_mem: 在维护性操作(比如 VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY等)中使用的内存缓冲区。