ACID
原子定义:每个事务都是不可分割的最小工作单位,事务中的所有操作要么完全成功,要么完全失败。 使用undo log实现回滚。 一致性定义:例如,a转入b,a减少1000,b就要增加1000,两个人的总余额不变。 隔离性定义:各事务之间相互隔离,互不干扰。 通过锁和MVCC定义隔离持久性:提交事务后,数据将永久存储在数据库中。 使用redo log实现故障恢复。 实现原理
重做日志
定义:包括重做日志缓冲区(内存)和重做日志文件(磁盘),记录事务执行过程中数据修改后物理数据页面的信息后台线程将缓冲区中的数据同步到磁盘。
流程图
作用
mysql故障时,如果buffer中仍有未同步到磁盘的数据,可以使用重做日志进行恢复(称为重做日志)。 什么时候开始写事务的http://www.Sina.com /重做日志? 什么时候释放重做日志?
在事务开始时写入重做日志。 当buffer中的数据页同步到磁盘时,重做日志将释放重用。 既然写重做日志也有磁盘I/o消耗,为什么不直接向磁盘写入数据呢?
直接写入磁盘是随机IO,写入重做日志是顺序IO,顺序IO比随机IO性能更好。 mysql将数据加载到内存中,最小单位为页面,因此即使页面发生很小的更改,整个页面也会更新,并产生大量无效的IO。 重做日志只包含实际写入的还原日志的一部分
定义:回退操作角色用于回退数据更改前的信息(记录3358www.Sina.com/)用于回退事务的操作保证事务的持久性读写
读锁定(共享锁定)定义)多个事务可以同时读取相同的数据,但不能同时写入相同的数据。 写锁定)定义)一个事务获取写锁定后,其他事务既不能读取也不能写入该数据。 多版本并行控制(mvcc )
隐藏字段(mysql在创建表时为每个表创建几个隐藏字段)。
row_id :行记录的唯一标志transaction_id :事务idroll_pointer :回滚指针。 指向对应的还原日志,用于回滚。 作用
提高同步性,不需要锁定,通过处理读写冲突,有利于读写多的场景和读写少的场景的原理
相同的数据为每个事务生成一个版本。 由隐藏字段实现。 每个事务只能读取特定版本的数据。 (类似于快照) )锁定的读取和读取之间不需要任何影响。 请关注公众号。 (正在持续更新) )。