深刻解读阿里云数据库POLARDB核心功能物理复制技术

日志是数据库的重要组成部份,按顺序以增量的方式记录了数据库上全部的操做,日志模块的设计对于数据库的可靠性、稳定性和性能都很是重要。 可靠性方面,在有一个数据文件的基础全量备份后,对运行中的数据库来讲,日志文件的重要性大于数据文件,只要操做记录到日志中并完成落盘,就等于操做完成,无须等待数据文件落盘。由于日志的顺序和增量方式,使得数据库的增量实时备份(包括备库)成为可能,更可使用异步、同步或Raft多数等方式经过保护日志来保护全部的数据。数据库

稳定性方面,日志的增量模式减小了须要写出的数据量,日志的顺序写对于IO操做十分友好,能够充分节约寻道时间(机械硬盘)和写入缓存,使得日志的写操做能够十分平稳,在面对高并发的事务时,不易出现剧烈的抖动,从而获得高的稳定性和性能。按照日志的组织形式,能够分为物理日志和逻辑日志,物理日志使用更偏向底层数据块操做的方式来描述变动,逻辑日志则偏向于使用记录镜像或SQL语句的方式来描述变动,事务引挚通常使用物理日志的模式来记录事务的底层操做,而非事务引挚则通常使用逻辑日志的方式。编程

用编程语言来打比方的话,物理日志至关于使用汇编语言来记录了操做,而逻辑日志则至关于使用Go/Python等级别的语言来记录操做,物理日志相比逻辑日志具备更高的可靠性、稳定性和性能。回顾数据库的历史,商业数据库都只支持物理日志,历来没有逻辑日志的说法。MySQL由于其上下分层(SQL层和引挚层)的设计致使事务存贮引挚层必须有独立的物理日志,以及多引挚支持的缘由,必须在SQL层设计逻辑日志以透明化不一样存储引挚(主备能够不一样引挚)的支持,造成了一个双日志的现状,对MySQL的稳定性和性能带来了极大的困难和挑战。缓存

物理日志因其格式比较底层,使其很是难以建立只读实例,而且从只读实例切换为读写实例须要比较长的时间,能够参考Oracel数据库的发展历程,长久以来一直没有支持随时只读的备库,将备库切换为主库须要极期严格的步骤,须要比较长的时间,比较难以实现自动化,没法轻松实现互联网读扩展流量扩展的需求。而逻辑日志因其格式比较上层,使其很是容易建立只读实例,从只读实例转换为读写实例能够在秒级完成,并造成了一整套的增量数据订阅消费。MySQL在享受逻辑复制好处时,也承受了逻辑复制带来的一些限制:微信

  • 存储引挚层难以直接产生逻辑日志,为了数据的一致性,在物理日志和逻辑日志之间引入了XA(2PC)机制,给稳定性和性能带来了极大的限制和挑战,致使事务处理性能和传统商业数据库相比有较大差距,基于物理日志则差距极小。
  • 同一事务的MySQL逻辑日志须要连续写出,所以没法支持较大的事务操做,过大的事务会致使操做失败。基于物理日志,同一个操做的日志能够分段(事务开始、操做一、操做二、事务提交)写出,所以能够支持大事务操做。
  • MySQL现有逻辑日志保存了整条记录的先后镜象,形成逻辑日志写入量较大增长IO压力,易引发性能降低和抖动。物理日志只记录变化字段,格式紧凑以减小总日志量,具有较好的IO性能,不易引发性能降低和抖动,肯有更高的性能和稳定性。
  • MySQL逻辑日志,在回入时须要从新通过SQL层代码,执行路径较长,而且不易并行处理,易形成备库时延,即逻辑日志产生的速度超过回放的速度;物理日志因包含完整事务信息,更易用事务一致性实现并行回放,可极大提高备库恢复的速度,作到高压力下主备ms级时延。以下图:

image.png | left | 827x428

  • MySQL逻辑日志,不包含事务信息,没法作连续性检测,能够从任意点开始恢复,不熟悉不专业的操做容易,形成问题;物理日志包含完整事务信息,能够作连续性检测,会自动识别上一次的中断点,减小人工判断操做,可有效防止人为误操做。

所以基于逻辑复制的MySQL在大表加字段、建索引等操做上,主备复制的体验很是不够好。POLARDB在充分认识到MySQL逻辑复制的优缺点后,选择以物理复制为基础实现复制节点(Replica),提高了主备复制的效率和体验,为广大客户提供了稳定、可靠、高性能能的只读节点,引领了新一代复制技术的发展。并发

相关文章:

1月19日,阿里云数据库技术沙龙——云原生数据库POLARDB核心技术分享将在北京昆泰酒店举行,对POLARDB核心技术细节感兴趣的同窗欢迎点击连接报名参加~banner_异步

 

原文连接
更多技术干货 请关注阿里云云栖社区微信号 :yunqiinsight编程语言

相关文章
相关标签/搜索