1.mysql体系结构
2.缓存池
2.1.buffer_pool
1.用来存放innodb表数据和索引的缓存
2.可设置服务器内存大小的50-80%
3.读写缓存时,数据是以16K大小读入缓存,buffer_pool是以LRU最少使用原则来进行数据页的换入和换出
4.LRU链表分为三个部分,尾部部分占链表的3/8,存放的是cold数据,不经常被使用,链表中间的部分存放的是最新进入缓存的数据,这部分数据先放入链表的中间部分,经常被访问的数据称之为hot数据,存放在LRU链表的头部,以便随时读取,LRU根据时间周期,在一定的时间周期里,没有被读取的hot数据,会自动移动到LRU链表的尾部。此时在buffer pool资源充足的情况下,LRU链表cold数据暂时不会被刷新出内存,当后台读写进程读取新的数据块,会首先查看data page,如果没有缓存,从文件系统上读取相应的数据块到data page 和 index page,如果此时内存无法存放读取新的数据块缓存,LRU先刷出最久未使用的缓存块,以此类推,用于存放新的缓存块,新的缓存块首先放在LRU链表的中间部分,如果频繁读取,中间部分的数据会向链表头部移动,如果长时间不读取,会向链表的尾部移动
5. innodb_buffer_pool_size=innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances
innodb_buffer_pool_chunk_size:默认128M,分配buffer_pool大小的最小单位
innodb_buffer_pool_instances:默认1,可调节范围1-64,如果为多个instances,每个instance都可以使用
6.innodb buffer pool预存取
线性read ahead: innodb_read_ahead_threshold,一个区中顺序读取的页数大于等于innodb_read_ahead_threshold,innodb触发异步read ahead操作读取整个区的数据到buffer pool,参数默认值为56,取值范围0-64
随机read ahead: 通过已经在buffer pool中的数据页数量来预测访问到的数据,算法13