如果缓冲池中的某个页被修改会被做怎样的处理?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
当缓冲池中的某个数据页被修改时,PolarDB会进行如下处理:
记录最新LSN(Log Sequence Number):修改发生后,该数据页的最新LSN会被记录下来,表示该页包含的最新事务日志序列号。
脏页管理:被修改的数据页被视为“脏页”,意味着其内容与磁盘上的不一致。PolarDB会跟踪这些脏页,以便在适当的时候将它们同步回磁盘。
刷脏控制:为了确保只读节点不会读取到未来页,PolarDB实施了刷脏控制机制。主节点在考虑将缓冲池中的数据页写入共享存储前,会检查该页的最新LSN是否小于等于所有只读节点的最老回放位点(Oldest Apply LSN)。满足条件的数据页会被刷新到存储中;否则,数据页保持在缓冲池内,避免只读节点遇到未回放的日志变更。
一致性位点维护:PolarDB通过维护每个Buffer的Oldest LSN,并找到最小的Oldest LSN作为一致性位点,以此来减少需要回放的WAL日志量。这有助于提高数据恢复效率和一致性。
热点页处理:对于频繁被修改而难以满足刷脏条件的热点页,PolarDB采用Copy Buffer机制。这些页面会被复制到一个独立的Copy Buffer Pool中,不再接受修改,从而能够根据Oldest Apply LSN的推进逐步满足刷脏条件并落盘。
综上所述,缓冲池中被修改的页会经历从标记为脏页、受刷脏控制策略管理、到可能的Copy Buffer处理等步骤,以确保数据的一致性和高性能访问。