Torn page
PostgreSQL 数据页在底层堆栈未完全写入时
当 PostgreSQL 指示操作系统写出一个完整的 PostgreSQL 数据页(默认 8kb)时,但操作系统或底层堆栈中的某个元素将写入拆分成多个单元(例如,两个 4kb 单元,符合典型的文件系统块大小),而在所有数据页写入部分全部完成之前发生系统故障,就会发生撕裂页(也称为部分页写入)。
PostgreSQL 通过将整个页面写入 WAL(“全页写入”)来缓解此问题。
此行为受 GUC 设置 full_page_writes 控制,默认值为 on。通常无需更改此参数。请注意,执行 pg_start_backup() 无论如何都会强制将 full_page_writes 设置为 on(请参见 src/backend/access/transam/xlog.c 中函数do_pg_start_backup()和提交 0a873949 中的注释)。
