PostgreSQL 与 MySQL 内存占用对比分析

核心摘要: 由于底层架构不同(多进程 vs 多线程),PostgreSQL 和 MySQL 在 Linux 系统命令(如 freetop)中的内存表现截然不同。

1. 架构差异根源

特性 PostgreSQL MySQL (InnoDB)
进程模型 多进程 (Multi-Process)
主进程 fork 出子进程处理连接。
多线程 (Multi-Thread)
单进程 (mysqld) 内部产生线程处理连接。
内存共享方式 OS System V / MMAP 共享内存
需向操作系统申请特殊的共享区域。
进程内堆内存 (Heap)
线程天然共享进程内的地址空间。
核心参数 shared_buffers innodb_buffer_pool_size

2. 实战案例分析

案例 A:PostgreSQL 服务器 (4GB RAM)

配置:shared_buffers = 1500MB

$ free -m total used free shared buff/cache available Mem: 3911 302 117 1545 3491 1797

案例 B:MySQL 服务器 (16GB RAM)

假设配置:innodb_buffer_pool_size = 4GB ~ 5GB 左右

$ free -m total used free shared buff/cache available Mem: 15987 5324 4209 22 6453 10302

3. 运维监控指南

如何判断内存是否正常?

对于 PostgreSQL:

不要被很低的 used 迷惑,也不要被很高的 buff/cache 吓到。

对于 MySQL:

内存实打实地显示在 used 中。

4. 结论

在排查内存问题时,必须结合数据库类型来解读 Linux 命令输出: