undo和redo日志

本文详细介绍了数据库中的undo log和redo log,它们分别用于保证事务的原子性和持久性。内存缓冲池(buffer pool)用于提高数据读写速度,通过redo log实现数据的持久化,undo log则用于事务回滚。在系统崩溃时,redo log可恢复数据到最新状态,undo log则用于恢复未完成的事务。同时,文章讨论了数据恢复策略和checkpoint机制,确保高效的数据恢复能力。
摘要由CSDN通过智能技术生成

数据库通常借助日志来实现事务,常见的有undo log、redo log

undo/redo log都能保证事务特性,undo log实现事务原子性,redolog实现事务的持久性。

为了最大程度避免数据写入时io瓶颈带来的性能问题,MySQL采用了这样一种缓存机制:

  • 当query修改数据库内数据时,InnoDB先将该数据从磁盘读取到内存中,修改内存中的数据拷贝,并将该修改行为持久化到磁盘上的事务日志(先写redo log buffer,再定期批量写入),而不是每次都直接将修改过的数据记录到硬盘内,等事务日志持久化完成之后,内存中的脏数据可以慢慢刷回磁盘,称之为Write-Ahead Logging
  • 事务日志采用的是追加写入,顺序io会带来更好的性能优势。
  • 为了避免脏数据刷回磁盘过程中,掉电或系统故障带来的数据丢失问题,InnoDB采用事务日志(redo log)来解决该问题。

先简单了解几个概念
数据库数据存放的文件称为data file
日志文件称为log file;
数据库数据是有缓存的,如果没有缓存,每次都写或者读物理disk,那性能就太低下了。数据库数据的缓存称为data buffer,日志(redo)缓存称为log buffer。

内存缓冲池

buffer pool如果mysql不用内存缓冲池,每次读写数据时,都需要访问磁盘,必定会大大增加I/O请求,导致效率低下。所以Innodb引擎在读写数据时,把相应的数据和索引载入到内存中的缓冲池(buffer pool)中,一定程度的提高了数据读写的速度。

buffer pool
占最大块内存,用来存放各种数据的缓存包括有索引页、数据页、undo页、插入缓冲、自适应哈希索引、innodb存储的锁信息、数据字典信息等。工作方式总是将数据库文件按页(每页16k)读取到缓冲池,然后按最近最少使用(lru)的算法来保留在缓冲池中的缓存数据。如果数据库文件需要修改,总是首先修改在缓存池中的页(发生修改后即为脏页dirty page),然后再按照一定的频率将缓冲池的脏页刷新到文件。

表空间

表空间可看做是InnoDB存储引擎逻辑结构的最高层。

  • 表空间文件:InnoDB默认的表空间文件为ibdata1。
  • 段:表空间由各个段组成,常见的段有数据段、索引段、回滚段(undo log段)等。
  • 区:由64个连续的页组成,每个页大小为16kb,即每个区大小为1MB。
  • 页:每页16kb,且不能更改。常见的页类型有:数据页、Undo页、系统页、事务数据页
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值