Innodb存储引擎
Innodb存储引擎 一次写入操作是一次事务,innodb 首先把事务数据写入到缓存池 Buffer Pool 和重做日志redo log中,然后就可以提交事务,响应客户端了。之后 innodb 再将新事务的数据异步地写入磁盘,真正存储起来。 Innodb主要是通过事务日志实现ACID特性 事务日志包括:重做日志redo和回滚日志undo Redo记录的是已经全部完成的事务,就是执行了提交的事务,记录文件是ib_logfile0 ib_logfile1 Undo记录的是已部分完成并且写入硬盘的未完成的事务,默认情况下回滚日志是记录下表空间中的(共享表空间或者独享表空间) 一般情况下,mysql在崩溃之后,重启服务,innodb通过回滚日志undo将所有已完成并写入磁盘的未完成事务进行回滚,然后redo中的事务全部重新执行一遍即可恢复数据,但是随着redo的量增加,每次从redo的第一条开始恢复就会浪费长的时间,所以引入了checkpoint机制 1.缓存池 buffer pool 数据的读写需要经过缓存(缓存在buffer pool 即在内存中) 数据以整页(16K)位单位读取到缓存中 缓存中的数据以LRU策略换出(最少使用策略) IO效率高,性能好(不用IO) 读操作: 数据是以页为存储单位,在缓冲池中缓存了很多数据页,当第一次读取时首先将页从磁盘读取到缓存池中