Mysql的事务日志

Mysql的事务具有四个特性:原子性、一致性、隔离性、持久性。那么事务的四种特性分别是靠什么机制实现的呢?

  • 事务的隔离性由锁机制来保证

  • 事务的原子性、一致性、持久性则由redo log和Undo log来保证。

    • redo log是重做日志,提供再写入操作,恢复提交事务修改的页操纵,用来保证事务的持久性。

    • undo log是回滚日志,回滚记录到某个特定的版本,保证事务的原子性和一致性。

  • redo log:是存储引擎(innodb)生成的日志,记录的是物理级别上的页修改操作,比如页号XXX、偏移量yyy写入了'zzz'数据。主要是为了保证数据的可靠性。

  • undo log:是存储引擎(innodb)生成的日志,记录的是逻辑操作日志。比如对某一行进行了insert语句操作,那么undo log就会记录与之相反的delete操作。主要用于事务的回滚 (undo log记录的是每个修改操作的逆操作)和一致性非锁定读(undo log回滚记录到某个特定的版本---MVCC,多版本并发控制)。

1. redo log

InnoDB引擎是以 为基本单位来管理存储空间的。在真正访问页面之前,需要把磁盘上的页读取到内存的buffer pool 中之后才能访问数据。所有的更新都必须先更新buffer pool中的数据,buffer pool中被更新过的页被称之为脏页(dirty page),然后buffer pool中的脏页会以一定的频率被刷到磁盘中(check point机制),通过缓冲池(buffer pool)来优化cpu和磁盘之间的速度鸿沟,保证整体的性能不会下降太快。

1.1 为什么需要redo日志?

相关推荐
Dovis(誓平步青云)15 小时前
《指标中转站:Pushgateway 如何把监控覆盖到这些原本看不见的角落》
数据库·生成对抗网络·oracle·内网穿透·飞牛nas
Linux运维老纪15 小时前
nginx 打造高性能 API 网关(‌Building a High-Performance API Gateway with Nginx)
linux·运维·mysql·nginx·云计算·运维开发
IT龟苓膏1 天前
Redis 数据类型底层原理:SDS、quicklist、intset、skiplist、Bitmap、HyperLogLog 一篇讲清
数据库·redis·skiplist
流星白龙1 天前
【MySQL高阶】19.变更缓冲区,自适应哈希索引,日志缓冲区
数据库·windows·mysql
晴天¥1 天前
Oracle中的监听配置与管理(动态、静态监听配置对比以及listener.ora和tnsnames.ora)
数据库·oracle
瀚高PG实验室1 天前
python连接HGDB超时
数据库·瀚高数据库·highgo
闪电悠米1 天前
黑马点评-Redisson-01_why_redisson
java·服务器·网络·数据库·缓存·wpf
Counter-Strike大牛1 天前
SpringBoot2.7.10+MyBatisPlus实现MySQL+DM双数据库切换
数据库·mysql
dllxhcjla1 天前
Redis
数据库·redis·缓存
睡不醒男孩0308231 天前
数据库高可用运维实操指南:基于CLup的PostgreSQL生产环境自动化管理
运维·数据库·postgresql