pg内存介绍
- shared_buffers
核心用途:
数据库缓冲区缓存:存储表和索引的数据页
共享内存区域:所有PostgreSQL进程共享的内存
减少磁盘I/O:类似于Oracle的Buffer Cache
| 特性 | PostgreSQL shared_buffers | Oracle Buffer Cache |
|---|---|---|
| 位置 | 进程共享内存 | SGA的一部分 |
| 管理方式 | 时钟扫描算法(Clock-sweep) | LRU算法 |
| OS缓存角色 | 双层缓存:也依赖OS缓存 | 主要依赖自身缓存 |
| 默认值 | 128MB | 自动管理 |
-
work_mem
核心用途:
每个操作的私有内存:用于排序、哈希、位图操作
会话级私有内存:每个操作独立分配
可并行使用:多个操作可同时使用各自的work_mem -
maintenance_work_mem
核心用途:
维护操作专用内存:VACUUM、CREATE INDEX、ALTER TABLE等
一次性大内存分配:这些操作需要连续内存块
提升维护性能:减少维护操作的I/O
综合内存监控
WITH memory_settings AS (
SELECT
name,
setting,
unit,
CASE
WHEN name = 'shared_buffers' THEN 'Shared Buffer Cache'
WHEN name = 'work_mem' THEN 'Per-operation Memory'
WHEN name = 'maintenance_work_mem' THEN 'Maintenance Memory'
ELSE name
END as description
FROM pg_settings
WHERE name IN ('shared_buffers', 'work_mem', 'maintenance_work_mem')
)
SELECT
description,
setting || ' ' || unit as current_value,
CASE
WHEN name = 'shared_buffers' AND setting::bigint < 10241024128
THEN 'Warning: May be too small for production'
WHEN name = 'work_mem' AND setting::bigint < 4096*1024
THEN 'Warning: May cause disk sorting'
ELSE 'OK'
END as recommendation
FROM memory_settings;
LRU理论上最优的近似算法,命中率最高。 时钟扫描(Clock-Sweep)略低于LRU,但远优于FIFO,且开销小,实际系统常用。

浙公网安备 33010602011771号