前序
InnoDB引擎有几个重点特性,为其带来了更好的性能和可靠性:
-
插入缓冲(Insert Buffer)
-
两次写(Double Write)
-
自适应哈希索引(Adaptive Hash Index)
-
异步IO(Async IO)
-
刷新邻接页(Flush Neighbor Page)
今天我们的主题就是 两次写(Double Write)
, 先一句话概括下:
上一次我们讲过Insert Buffer 是用来提高存储引擎性能上的提升,Double Write 就是为了在数据库崩溃恢复时保证数据不丢失的一个重要特性,保证了数据的可靠性。
概念点
如图,还是先来说几个基础的概念:
-
数据库表空间由段(segment)、区(extent)、页(page)组成
-
默认情况下有一个共享表空间ibdata1,如使用了innodb_file_per_table则每张表独立表空间(指存放数据、索引、插入缓冲bitmap页)
-
段包括了数据段(B+树的叶子结点)、索引段、回滚段
-
区,由连续的页组成,任何情况下每个区都为1M,一个区中有64个连续页&#