26.pg_wal缓冲区浅析
1.内存结构如下
可以看到在共享内存中有一块区域叫做wal buffer,为了快速写操作,WAL首先写到内存,然后异步写到磁盘。写入内存的区域称为WAL缓冲区,由参数wal_buffer
控制,默认值为shared_buffers值的1/32。并且WAL Writter进程将以200ms的默认设置将内存中的WAL缓冲区写入磁盘。它由bgwriter_delay
arondb=# show shared_buffers; shared_buffers ---------------- 128MB (1 row) arondb=# show wal_buffers; wal_buffers ------------- 4MB (1 row) arondb=# show bgwriter_delay; bgwriter_delay ---------------- 200ms (1 row)
以下情况wal writer进程会把缓冲区数据写入磁盘,这样就能最大程度避免了崩溃时数据不一致的情况。
- wal writer定期执行
- 执行COMMIT 时
- 执行checkpoint时
- 运行vacuum时
- WAL缓冲区溢出时
- 共享缓冲区溢出时
wal日子归档级别