预读从字面意义就能理解,就是通过一系列指标,判断先读取某些数据 加载到内存中,从而减少实时IO请求。数据库发展到目前,IO交互的代价还是最高的,特别是传统的机械硬盘下预读能力确实能提供性能。但前提是内存充裕,比如刚预读,数据还没有读取,内存容量不够,就得立即从缓存中淘汰掉,那就等于做了无用的事情。
了解预读能力之前,先回顾一下InnoDB逻辑存储单元主要分为表空间、段、区和页。层级关系为tablespace -> segment -> extent(64个page,1M) -> page(默认16kb)。
innodb引擎对于数据页变更的操作是异步进行的,但对于读请求来说可以使read-time读之外,通过预读方式进行先加载策略。
预读请求是指预取缓冲池中的多个页面的异步I/O请求,以预测这些页面即将出现的需求。请求在一个区段中引入所有页面。InnoDB使用两种预读算法来提高I/O性能: