mysql的预读机制
我们知道,只要不存在或减少磁盘 I/O,MySQL的查询速度自然就会变快。那么对于加载数据页这种无法避免的磁盘 I/O 来说是否有更好的方式呢?既然避免不了,那减少磁盘 I/O 的次数总可以吧?这就是我们接下来要讲的缓冲池的预读机制。
磁盘读写的时,是按照页的方式来读取的(你可以理解为固定大小的数据,例如一页数据为 16K),每次至少读入一页的数据,如果下次读取的数据就在页中,就不用再去磁盘上读取了,从而减少了磁盘 I/O,比如可能会提前缓存接下来可能会用到的相邻的数据页,这里涉及两种预读算法来提高IO性能:线性预读(linear read-ahead)和随机预读(randomread-ahead)。
介绍两种算法前,我们先明确下算法中的一个定义:
extent:innodb中将64个page划分为一个extent。
为了区分这两种预读的方式,我们可以把线性预读放到以extent为单位,而随机预读放到以extent中的page为单位。