做兼职哪个网站比较好,wordpress知识付费插件,wordpress ftp设置,小城镇建设网站Redo log
介绍Redo log之前我们需要了解一下#xff0c;mysql数据操作的流程#xff1a; 上述就是数据操作的流程图#xff0c;可以发现sql语句并不是直接操作的磁盘而是通过操作内存#xff0c;然后进行内存到磁盘的一个同步。这里我们必须要了解一些区域#xff1a;
缓…Redo log
介绍Redo log之前我们需要了解一下mysql数据操作的流程 上述就是数据操作的流程图可以发现sql语句并不是直接操作的磁盘而是通过操作内存然后进行内存到磁盘的一个同步。这里我们必须要了解一些区域
缓冲池buffer pool主内存中的一个区域里面可以缓存磁盘经常操作偶的真实数据在执行增删查改的时候先操作缓冲池中的数据如果缓冲池中没有数据则从磁盘中加载并且缓存以一定的频率刷新到磁盘当中从而减少磁盘io加快处理速度数据页page是InnoDB存储引擎磁盘管理的最单元每页默认的大小是16kb。页中存储的是表中一行又行数据
当执行sql语句的时候首先会操作内存中的缓冲池首先会判断是否有操作的数据如果没有从磁盘中加载因为直接操作内存的性能会比操作磁盘的性能更加高然后将操作缓冲池中的数据同步到磁盘中这样的目的就是可以减少磁盘的io加快处理的速度这样就完成了事务的持久化
但是我们需要想到一个问题如果我们在将脏页缓冲池的数据的数据同步到磁盘中的时候数据库宕机了这个时候就会发生数据的丢失就不能满足事务的持久化了所以我们就需要Redo log日志来解决这样的问题
Redo Log重做日志纪律的是事务提交的时候的数据页的物理修改是用来实现事务的持久性
操作的流程图如下 redo log日志主要是分为两个部分重做日志缓冲以及重做日志文件前者是在内存中的后者是在磁盘中的。当事务提交之后会把所有修改信息都存储在日志文件中用于刷新脏页到磁盘发生错误的时候进行数据的恢复使用
具体流程就是当发生增删改的时候首先会修改buffer pool中的数据而redo log buffer会记录里面的数据页的变化一旦日志出现了变化就会同步到磁盘中的重做日志文件当发现buffer pool同步数据失败的时候可以通过日志来同步数据
但是就会有一个疑问这样是否会拖慢操作的速度呢不用redo log可以么当数据页发生变化的时候直接进行内存到磁盘的同步不可以么
是可以的但是会出现性能的问题当大量的增删改的sql发过来的时候内存到磁盘的同步是随机的磁盘的io这样的性能是很低的。而redo log是顺序的磁盘io日志文件是追加的这样性能会提升这种机制就叫做WAL
顺序 I/OSequential I/O是指读写操作的访问地址连续。在顺序 I/O 访问中存储设备如 HDD 硬盘所需的磁道搜索时间显著减少因为读/写磁头可以以最小的移动访问下一个块。数据备份和日志记录等业务通常是顺序 I/O 业务。随机 I/ORandom I/O则是指读写操作时间连续但访问地址不连续随机分布在磁盘的地址空间中。产生随机 I/O 的业务有 OLTP 服务、SQL 操作、即时消息服务等
Undo log
Undo log是一个回滚日志作用主要是包含两个提交回滚和MVCC多版本并发控制。undo log和redo log记录物理日志不一样他记录的是逻辑日志undo log可以实现事务的一致性和原子性
可以认为当delete一条数据的时候undo log会记录一条对应的insert记录反之亦然当update一条记录的时候它记录一条对应相反的update记录。当执行rollback时就可以从undo log中的逻辑记录读取到相应的内容并进行回滚
Redo log和undo log区别
lredo log: 记录的是数据页的物理变化服务宕机可用来同步数据lundo log 记录的是逻辑日志当事务回滚时通过逆操作恢复原来的数据lredo log保证了事务的持久性undo log保证了事务的原子性和一致性