redo log:
(是一个覆盖写的过程,可以指定文件大小,默认48M)恢复操作,重新操作(最新的数据先保存到redo Log,注不是事物提交才写入的,而是事物执行过程中就开始写入redo log)
redo log:是为了实现事务的持久化而出现的,防止发生故障(断电等)的时间点,尚有脏未写入磁盘,在重启mysql服务的时候,根据redo log重新进行持久化
redo buffer 写入redo log是顺序io
redo log有三种策略(innodb_flush_log_at_trx_commit=0、1、2)
最佳性能(innodb_flush_log_at_trx_commit=0) 每隔一秒 redo buffer -> redo log
强一致(innodb_flush_log_at_trx_commit=1) 每次事务提交 redo buffer -> redo log
折衷(innodb_flush_log_at_trx_commit=2)每隔一秒、每次事务提交 redo buffer -> redo log
Undo Log:
1、事务开始之前,数据备份到undo log(是为了事务的原子性而出现的产物)
事务错误或者rollback,mysql会利用undo log中备份的数据恢复到事务开始之前的状态(实际是从内存的undo buffer中恢复到开始之前的状态,undo buffer 最终持久化到磁盘的 undo log)
2、undo log在mysql innodb存储引擎中用来实现多版本并发控制
快照读:(通过快照读的mvcc解决脏读问题)
普通的select就是快照读,也就是快照版本(历史版本)
当前读:(通过当前读的临键锁解决幻读问题)
读取的是最新的版本,通过锁的机制保证数据无法通过其他事物进行修改
网友评论