做微商网站设计,鞍山58二手车,cvm服务器做网站,品牌建设工作undo log和redo log 先引入两个概念#xff1a; 当我们做了一些操作 (update/delete/insert)#xff0c;提交事务后要操作MySql中的数据。
为了能够提升性能#xff0c;引入了两块区域#xff1a;内存结构和磁盘结构。
磁盘结构#xff1a; 主要存储的就是数据页#x… undo log和redo log 先引入两个概念 当我们做了一些操作 (update/delete/insert)提交事务后要操作MySql中的数据。
为了能够提升性能引入了两块区域内存结构和磁盘结构。
磁盘结构 主要存储的就是数据页每个数据页存储的就是表中一行一行的数据。一个表的数据可能由多个数据页存储。
但当我们做一些增删改的操作时不会直接操作磁盘。而是先去操作内存。
内存结构 当操作来了以后先来操作缓冲池。从内存中的缓冲池里面先找有没有我要操作的数据。如果没有就会把磁盘中的数据(某一个数据页的数据)加载到缓冲池中。这样直接操作内存性能会更高操作完成之后缓冲池中数据会同步给磁盘。这样就减少磁盘的IO加快了处理速度
这就引出了问题
现在内存中的数据页被操作完了但还没同步到磁盘中 (此时这个数据页称为脏页)这个时候服务器宕机了同步失败了。内存中的数据可能就消失了数据丢失了。这就违背了事务持久化的特性。 解决方案redo log (解决事务持久性) 加入Redolog buffer和Redolog file后数据操作也会发生一点变化。 当有增删改操作之后现在buffer pool已经发生了变化。Redolog buffer就会记录对应数据页发生的变化一旦Redolog buffer发生变化 (说明有新的数据页变化)。就会同步给磁盘中的Redolog file中。现在一旦buffer pool对脏页数据同步失败了就可以从Redolog file恢复数据
注意你可能会有疑问这样做岂不是更麻烦了不用这个Redolog行不行呢比如说当buffer pool中的数据页发生变化直接进行同步不好吗
答这样做不好会有严重的性能问题。当我们操作增删改的时候会有大量的update等语句如果我们同步刷新对磁盘IO次数太多了每执行一条sql可能就要进行一次连接数据库。而如果使用redolog它进行数据同步时都是顺序的磁盘IO (可以理解为进行了归纳连接一次数据库会进行多条sql语句)。这样性能就可以大大提升了 注意 等到脏页刷新完成后可以认为redo log不需要了进行定期清理等下一个事务需要的时候又往里面填写内容文件不会删除而是重复利用。两个redo log文件循环写的。 undo log回滚日志 (解决事务一致性和原子性) 二者区别