ACID实现原理

ACID(原子性、一致性、隔离性、持久性)是数据库事务的四大特性。MySQL通过undo log确保原子性和隔离性,redo log保证持久性。原子性依赖于undo log进行回滚操作;持久性通过redo log的物理记录和定期刷新保证;隔离性则通过锁机制和MVCC(多版本并发控制)实现,防止并发操作带来的数据不一致。redo log的追加写入优化了写入效率,而innodb_buffer_pool和innodb_log_buffer分别用于缓存数据页和事务日志,提高性能。
摘要由CSDN通过智能技术生成

ACID实现原理

原子性

一个事务是不可分割的工作单位
undo log(原子性,隔离性的基础):逻辑文件,记录sql相关信息,发生回滚时,根据undo log做与之前相反的工作,还原数据。

持久性

一旦提交,永久性改变。
redo log:buffer pool作为访问数据库的缓冲,从数据库读取数据时先从buffer pool读取,未读到,就从磁盘中读取并放入buffer pool中。写数据时,先写到buffer pool中,定期刷新到磁盘,提高读写效率。mysql宕机时刷脏未完成可能丢失数据,所以引入redo log记录,以物理格式记录,写数据时,写入buffer pool,同时在redo log中记录,提交时将日志写入磁盘,buffer pool刷盘后,redo log可以被覆盖。
redo log也有一个缓冲区,innodb_log_buffer,InnoDB先将redo log写入缓冲区,再通过三种方式刷盘到磁盘。

三种刷盘:
1.主线程每秒刷盘一次;2.缓冲区所占内存超过50%;3.事务提交时。


redo log比直接在buffer pool中写得快?
刷脏是随机IO,每次修改数据位置随机,redo log是追加操作,是顺序IO,且刷脏是以数据页page为单位,16kb,一个page页的一小部分修改也需

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值