背景
懂PostgreSQL, 学PolarDB不难, 就好像有九阳神功护体, 可以快速融会贯通.
对于DBA只要学会PolarDB精髓即可.
对于开发者来说不需要学习, 使用PolarDB和PostgreSQL一样.
为什么FPW是以牺牲(性能、存储空间、稳定性)换取的可靠性?
https://www.bilibili.com/video/BV1jR4y137Yo/
背景知识:
数据库的数据文件以block的形式来进行组织. 每个block的大小可选2k,4k,8k,16k,32k.
修改数据块的内容时, 先将数据块从存储读到shared buffer里, 修改后再由bgwriter或checkpointer调度从shared buffer内存写入到磁盘.
磁盘通常以扇区(512字节)进行组织, 一次IO的最小单位也通常小于block size, 那么当block正在从内存写入到磁盘时, 如果发生这几个事情, 可能出现坏块:
- 断电, block的一部分可能是新的状态, 另一部分可能是老的状态.
- 在线备份, 拷贝文件, 同样拷贝到的block的一部分可能是新的状态, 另一部分可能是老的状态.
- 磁盘快照, 快照内的block的一部分可能是新的状态, 另一部分可能是老的状态.
如果出现坏块, 将导致数据不一致或损坏. 怎么检测出这种块错误?
- block checksum.
怎么解决坏块问题?
- FPW, full page write. 在将block从内存写出到磁盘前, 必须确保这个block的完整页面的内容已经写入到wal日志中(对于同一个block, 每次checkpoint后只有这个block第一次发生变化时需要写一次full page到wal中).
- 如果开启了FPW, 即使出现了datablock 坏块, 也能从wal的full page中恢复到一致的状态.
fpw 牺牲了什么?
- 性能:
- 当更新或删除时, 每次checkpoint后都要写入更多的wal(fpw), 即使每个page只更新1条记录, 第一次也需要写1个完整的page. 导致性能损耗. 如果checkpoint频繁, 这个性能损耗会更加明显.
- 当datablock被vacuum进行垃圾回收或freeze时, 每次checkpoint后第一次修改的page需要写完整的page到wal(即使每个page只更新少量内容). 导致性能损耗. 如果checkpoint频繁, 这个性能损耗会更加明显.
- 存储空间:
- 消耗更多的WAL存储空间: 包括wal目录, 归档文件, standby的wal文件.
- 同时消耗更多网络带宽(primary-standby的网络带宽)
- 稳定性(指SQL RT)
- 对于高并发频繁update, delete的场景, 每次checkpoint时, SQL RT 抖动会比较明显, 原因: 此时WAL日志暴增(full page write), wal的排他锁、IO写延迟等可能更加集中. 影响性能.
PolarDB:
- PolarDB 计算存储分离架构版本. 采用PolarStore, 支持大于block size的原子写.
- 因此不需要开启fpw.
- PolarDB 三节点分支, 同样允许关闭fpw. 关闭fpw后采用从standby节点读取datafile来解决FPW的问题. 详见:
本期问题1:
请问PolarDB PG三节点版本在关闭fpw后进行数据恢复时, 从哪里读取checksum有错误的data block?
- a. WAL里面的full page datablock
- b. 当前实例的数据文件
- c. standby节点的数据文件
- d. 归档的WAL日志文件
答案:
- c
解释:
- PolarDB PG三节点版本可以关闭fpw, 关闭fpw后, 会从standby节点的数据文件读取需要的data block.
本期问题2:
请问PolarDB PG共享存储版本为什么可以关闭fpw而不会导致data block出现partial write的坏块?
- a. 存储支持超过data blocksize的原子写.
- b. 开启了 block checksum
- c. 在其他地方写了一份FULL PAGE
- d. 从standby 节点取得full page
答案:
- a
解释:
- PolarDB 计算存储分离版本采用PolarStore存储或者其他支持超过data blocksize的原子写的SAN存储或者分布式块存储时, 存储的原子操作和PFS对齐后, 可以关闭fpw, 而不会产生data block的partial write.
本期问题3:
请问开启full page write有哪些负面影响?
- a. recovery时需要从wal中读取full page导致恢复性能下降.
- b. 高并发的更新、删除小事务, 在遇到检查点时很大概率会发生较为明显的SQL RT抖动
- c. 在发生vacuum freeze时, 由于开启fpw可能产生大量的full page, 导致standby延迟变大
- d. 如果检查点频率很高, 开启fpw会导致写更多的wal日志, 从而导致归档的拷贝压力、存储空间变大
答案:
- bcd
解释:
- fpw不影响恢复性能, 反而可能对恢复性能有帮助, 因为不需要从datafile中获得block(减少了离散IO).
本期问题4:
请问以下哪些文件系统可以关闭full page write而不会导致数据文件不一致的问题?
- a. zfs
- b. ext4
- c. xfs
- d. 支持cow(copy on write)功能的文件系统
答案:
- ad
解释:
- 文件系统支持copy on write, 并且在打开cow后, 实际上与数据库FPW的功能类似, 因此可以关闭数据库的fpw.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
1626次阅读
2025-04-09 15:33:27
9.9 分高危漏洞,尽快升级到 pgAdmin 4 v9.2 进行修复
严少安
329次阅读
2025-04-11 10:43:23
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
320次阅读
2025-04-15 14:48:05
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
271次阅读
2025-04-07 12:14:29
从mysql社区版迁移到信创PolardbX-DN上
金同学
163次阅读
2025-04-01 09:50:14
阿里云Tair KVCache:打造以缓存为中心的大模型Token超级工厂
阿里云瑶池数据库
153次阅读
2025-03-25 10:37:41
postgresql+patroni+etcd高可用安装
necessary
147次阅读
2025-03-28 10:11:23
从 Oracle 到 PostgreSQL迁移成本评估揭秘
梧桐
140次阅读
2025-03-27 17:21:42
转发有奖 | PostgreSQL 16 PGCM高级认证课程直播班招生中!
墨天轮小教习
139次阅读
2025-04-14 15:58:34
手把手教你在 openKylin 上部署 IvorySQL 4.4
严少安
139次阅读
2025-03-27 20:41:28