过多的同步点显著影响了Redo Log的同步速度,可能导致只读节点过高的同步延迟。为了解决这个问题,PolarDB引入了版本号机制,以协调Redo Log同步机制和用户读请求的并发执行。具体的操作是怎么样的?
具体操作如下:
• 在解析 Redo Log 阶段,只读节点会收集所有执行SMO 操作的索引id,并递增Sync_counter;
• 获取所有受SMO 影响的索引的X 锁,并在index 内存结构上维护最新的Sync_counter 副本,然后释放索引的X 锁。由于访问B+树的请求同样需要持有索引S 锁,X 锁就能确保B+树的访问操作都在该操作完成后执行;
• 当用户请求遍历B+树时,它会检查索引的Sync_counter 副本是否与全局的Sync_counter 一致。如果相等,说明B+树可能处于SMO 操作,这时它需要依赖Redo Log 将它访问的索引页更新到最新的版本;如果不相等,就无须做Redo Log 的回放工作。
通过上述乐观方式,PolarDB 在很大限度上减少了应用SMO Redo Log 时对并发B+树请求的干扰,在保证跨节点的物理一致性前提下,明显提升了只读节点的性能。
以上内容摘自《云原生数据库原理与实践》,这本书可以在电子工业出版社天猫店购买。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。