[MySQL]事务原理之redo log,undo log

2024-07-03 1069阅读

🌈键盘敲烂,年薪30万🌈

目录

一、log日志文件

📕 事务执行流程

📕 redo log

📕 undo log

二、总结


  • 👀再来一遍ACID

    1. 原子性:原子性确保事务作为一个整体执行,要么全部执行成功,要么全部不执行。

    2. 一致性:一致性确保事务将数据库从一个状态转换为另一个状态。

    3. 隔离性:隔离性确保并发执行的多个事务互相隔离。

    4. 持久性:事务一旦提交,其修改将永远保存在数据库中。

    [MySQL]事务原理之redo log,undo log

    一、log日志文件

    📕 事务执行流程
    • 为什么会有日志❓

      先说结论:

          数据库日志的存在是为了确保事务的持久性,支持故障恢复和并发控制,并提供回滚、撤销以及备份和恢复的功能。日志记录了对数据库的操作,使得数据库系统能够有效地管理数据的修改和恢复。

      • 确保持久性❓ 难道没有日志事务提交后可能出现数据不一致❓

        分析:

            执行事务->判断内存中有无数据->(加载磁盘数据到内存)->事务提交->日志保存到磁盘

        问题1:刷新数据时机?

            系统会根据负载情况和性能优化的考虑来决定脏数据刷新的时机和方式。

        问题2:为什么不能提交完事务,直接将Buffer Pool数据保存到磁盘文件?

            我们平时操作的数据库都是随机的,也就意味着随机访问磁盘文件,这会大量占用I/O,性能很低。但是,日志是以追加的方式写入,是顺序访问磁盘文件,性能高的很。

        [MySQL]事务原理之redo log,undo log

        WAL机制:

        Writer - Ahead - Logging: 先记录日志在刷新脏数据

        小结:

        了解了事务的执行流程在看日志就比较简单了,无非就是两种记录方式。

        📕 redo log
        • 重做日志,记录事务提交时对数据页的操作,从而实现事务的持久性。

          redo log buffer:内存中的数据库数据。

          redo log file:磁盘中的数据库数据。


          📕 undo log

          又称回滚日志,用于记录被修改前的信息,作用有两个,回滚事务,MVCC。它可以保障事务的原子性

          注意:

          Undo log记录的数据是反向的,比如执行一条delete语句,undo log保存一条insert语句,回滚就是读取undo log中的sql语句,再比如执行update语句,undo log会保存update前的数据库状态。

          Undo log销毁:事务提交后不会立刻销毁日志,因为这些日志可能用于MVCC

          Undo log存储:采用段的方式进行管理和记录(这里不太懂)

          二、总结

          redo log保证了事物的持久性

          undo log保证了事务的原子性

          redo log + undo log保证了事务的一致性

          MVCC+锁保证了事务的隔离性(下一篇)

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]