首页 > 代码库 > MYSQL的InnoDB Buffer Pool内部机制
MYSQL的InnoDB Buffer Pool内部机制
1. 基本结构:INNODB用least recently used (LRU) 算法来管理他的buffer_pool。 buffer_pool在内部被分隔为两个list. a young list 和 a old list.
Young list 存储那些高频使用的缓存数据(默认占整个BUFFER的5/8)
Old list 存储那些低频使用的数据(默认占整个BUFFER的3/8)
2.使用机制:当一个新块数据被从磁盘缓存到buffer当中,它默认被放在Old list的头部,即midpoint。Old list内的任何一个块数据被再次访问,innodb都会把它加入到Young list的头部。但如果块数据是被read-ahead机制访问,它不会马上被加载到Young list。 当长期不使用的数据块被挤到了Old list的尾巴,就会被系统回收。
3. 配置方式:
innodb_old_blocks_pct:设定 Young list 和 Old list 的比例。(default value is 37 (that is, 3/8 of the pool).
innodb_old_blocks_time:设置Old list内的数据块被访问后到加入 Young list的延迟时间。默认是0,即马上加入Young list。当临时使用一些dump或全表扫描时,可是使用此参数避免大量的数据块被回收。
4. 监控:show engine innodb status的BUFFER POOL AND MEMORY部分包含里Old/Young list的使用情况
Old database pages:包含在Old list内的数据页数
Pages made young:The number of old pages that were moved to the head of the buffer pool (the new sublist)
not young:he number of pages that have remained in the old sublist without being made new
youngs/s:导致数据块加入Young list的访问进程数(注:这里是进程数,而不是数据块数量)
non-youngs/s:没有导致……
young-making rate:Hits that cause blocks to move to the head of the buffer pool
not: Hits that do not cause blocks to move to the head of the buffer pool (due to the delay not being met)
(young-making rate and not rate will not normally add up to the overall buffer pool hit rate)
5. 新版的5.5的多pool 机制:设置innodb_buffer_pool_instances大于1,可使用多个pool, 使得访问竞争被分散。每块pool的大小等于innodb_buffer_pool_size/innodb_buffer_pool_instances,。(注意:每块至少不能不要小于1G。)