开发者社区 > 数据库 > 正文

过多的同步点显著影响了Redo Log的同步速度,可能导致只读节点过高的同步延迟。为了解决这个问题,

已解决

过多的同步点显著影响了Redo Log的同步速度,可能导致只读节点过高的同步延迟。为了解决这个问题,PolarDB引入了版本号机制,以协调Redo Log同步机制和用户读请求的并发执行。具体的操作是怎么样的?

展开
收起
云上静思 2022-09-19 15:35:04 381 0
1 条回答
写回答
取消 提交回答
  • 推荐回答

    具体操作如下:

    • 在解析 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+树请求的干扰,在保证跨节点的物理一致性前提下,明显提升了只读节点的性能。

    以上内容摘自《云原生数据库原理与实践》,这本书可以在电子工业出版社天猫店购买。

    2022-09-19 17:14:02
    赞同 展开评论 打赏

数据库领域前沿技术分享与交流

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载