执行层(排序、Join、TempTable、缓冲池):PG 与 MySQL 内存对照

一、InnoDB 内存结构(17.5)

章节 结构名 作用
17.5.1 Buffer Pool Buffer Pool 表/索引页;LRU young/old
17.5.2 Change Buffer Change Buffer 二级索引页不在 BP 时缓存 DML;内存占 BP 份额
17.5.3 Adaptive Hash Index AHI B-tree 索引 自适应哈希;≠ SQL Hash Join

Buffer Pool 在启动时按 innodb_buffer_pool_size 通过 malloc() 分配整池(官方 17.5.1)。


二、mysqld 完整内存结构图

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysqld 进程
├─── InnoDB 存储引擎 ───────────────────────────────────────────
│    │
│    ├── Buffer Pool                          [17.5.1]
│    │     ├── 数据页 / 索引页(LRU: young + old sublist)
│    │     ├── Undo 页(undo tablespace 读入后作为普通 frame)
│    │     └── Change Buffer 相关页(IBUF_INDEX / IBUF_BITMAP)
│    │
│    ├── Change Buffer(逻辑结构,内存占 BP 份额)  [17.5.2]
│    │
│    ├── Adaptive Hash Index (AHI)            [17.5.3]
│    │
│    ├── Log Buffer → #innodb_redo              [17.6.5]
│    │
│    ├── Doublewrite Buffer(内存)+ .dblwr 文件  [17.6.4]
│    │
│    └── Dictionary Cache 等
├─── SQL Server 层 ─────────────────────────────────────────────
│    ├── 每连接 THD:sort buffer、Join Buffer、Hash Join 表、
│    │              TempTable、Binlog Cache、mem_root …
│    └── 全局:Table Open/Definition Cache、PFS、权限缓存 …
└─── 磁盘:表空间、#innodb_redo、undo、doublewrite、binlog、tmpdir

三、redo / undo / 双写 / binlog 落在哪

组件 MySQL 内存结构名 磁盘 PostgreSQL 对照
Redo Log Buffer #innodb_redo WAL Bufferspg_wal
Undo Buffer Pool 中的 undo 页 undo tablespace undo 文件 + 缓冲池中页
Doublewrite Doublewrite Buffer + 文件 .dblwr 实现机制不同
Binlog Binlog Cache binlog 文件 逻辑解码 / WAL
热点数据页 Buffer Pool LRU young .ibd Shared Buffers

四、PostgreSQL 平行结构图

1
2
3
4
5
postgres 实例
├── 共享内存:Shared Buffers、WAL Buffers、锁 …
├── 每 backend:MemoryContext(Tuplesort、HashJoinTable…)、
│              local buffers(临时表)、pgsql_tmp
└── 磁盘:base/、pg_wal、表空间

五、执行层结构速查(与总图关系)

场景 MySQL PostgreSQL
排序 sort buffer Tuplesortstate
Hash Join Hash Join 哈希表 HashJoinTable
BNL Join Buffer
GROUP BY / 物化 TempTable Materialize / HashAggregate
表页 Buffer Pool Shared Buffers

六、手册索引

  1. 10.12.3.1 How MySQL Uses Memory
  2. 17.5 InnoDB In-Memory Structures
  3. 17.5.1 Buffer Pool
  4. 17.5.2 Change Buffer
  5. 17.5.3 Adaptive Hash Index
  6. 17.6.4 Doublewrite Buffer
  7. 17.6.5 Redo Log
  8. 10.4.4 Internal Temporary Tables