buffer pool预读机制
预读是MySQL提高性能的一个重要的特性。预读就是io异步读取多个页数据读入buffer pool的一个过程,并且这些页被认为是很快会被读取到的。innodb使用两种预读算法来提高io性能:线性预读和随机预读
线性预读linear read ahead
线性预读的单位是区(extend),一个区有64个页(page)。线性预读的一个重要的参数是inndb_read_ahead_threshold指在连续访问多少页之后,把下一个区的数据异步的预读到buffer pool中,这个参数不能超过64,默认56。
随机预读random read ahead
随机预读的单位是页(page),将当前区(extend)中的其他页随机的读取到buffer pool中。由于随机预读方式带来了一些不必要的复杂性和不稳定性,在5.5中以及将这种方式关闭。若要开启此功能需要设置innodb_random_read_ahead=‘ON’
innodb逻辑存储结构
所有数据都会被逻辑的存储在表空间中,表空间对应的物理结构就是磁盘上的一个个文件、日志、数据等
表空间的逻辑组成:段(sengment)、区(extent)、页(page)组成
表空间是由各个段组成的,常见的有数据段、索引段、回滚段
区是由连续的页组成的,在任何情况下区的大小都是1m,为了保证页的连续,innodb每次都会申请4-5个区。页的大小是16k所以一个区有64个页