innodb的磁盘IO(read-ahead和doublewrite技术)(来自于mysql文档)

InnoDB使用模拟异步磁盘I/O:InnoDB创建许多线程来处理I/O操作,比如read-ahead(预读).

 

在InnoDB中有两个read-ahead试探:

(注:Innodb的记录在文件中的顺序是按照主键顺序存储)

(1)在连续read-ahead中,如果InnoDB注意到在表空间中对一个片断的访问方式是连续的,它就预先布置一批数据库页的读给I/O系统。

(2)在随机read-ahead中,如果InnoDB注意到表空间中的一些区域看起来进入完全读进缓冲池中的处理中,它就布置剩余的读到I/O系统。

 

InnoDB使用一个被称为doublewrite(双写)的新颖的文件刷新技术。它给操作系统崩溃或掉电后的恢复添加了安全,并且通过减少对fsync()操作的需要,它在多数Unix变种上改善了性能。

 

Doublewrite意为在向一个数据文件写页之前,InnoDB首先把它们写到一个毗邻的表空间区域,称为doublewrite缓冲。仅在写然后刷新到doublewrite已经完成之后,InnoDB写页面到它们在表空间中恰当的位置。如果操作系统在写页面的中间崩溃,在恢复过程中,InnoDB可以在随后从doublewrite缓冲中找到页面的一个良好复制。

你可能感兴趣的:(数据库)