Innodb.
在可能的情况下使用异步磁盘I/O,通过创建一些线程来处理I/O操作,同时允许其他数据库操作在I/O仍在进行时继续进行。在Linux和Windows平台上,Innodb.
使用可用的操作系统和库函数来执行“本地的“异步I / O.在其他平台上,Innodb.
仍然使用I / O线程,但线程实际上可能等待I / O请求完成;这种技术被称为“模拟“异步I / O.
如果Innodb.
可以确定数据可能很快需要数据,它执行了预读操作以将该数据带入缓冲池中,以便在内存中使用。为连续数据制作一些大的读取请求可能比制作几个小型,扩散的请求更有效。有两个读者启发式Innodb.
:
在连续的预读,如果
Innodb.
注意到,表空间中的段的访问模式是顺序的,它预先将一批数据库页面读取到I / O系统。在随机读物中,如果
Innodb.
注意到表空间中的某些区域似乎正在被完全读到缓冲池中,它将剩余的读发送到I/O系统。
有关配置读取前启发式的信息,请参阅第15.8.3.4节,“配置InnoDB缓冲池预取(预读)”。
Innodb.
使用一种新的文件刷新技术,涉及名为doublewrite缓冲,大多数情况下默认启用(innodb_doublewrite =上
).它增加了意外退出或断电后恢复的安全性,并通过减少对Unix的需求提高了大多数Unix上的性能fsync()
操作。
在向数据文件写入页面之前,Innodb.
首先将它们写入名为DoubleWrite缓冲区的存储区域。只有在写入之后,刷新到双手缓冲区已完成Innodb.
将页写入数据文件中的适当位置。如果存在操作系统、存储子系统或意外情况mysqld.进程在页写中间退出(导致撕裂条件),Innodb.
稍后可以在恢复期间从DoubleWrite缓冲区找到页面的好副本。
有关Doublewrite缓冲区的更多信息,请参阅第15.6.4节,“Doublewrite缓冲区”。