这两个东西是什么呢?为什么把他俩放到一起来讲?
因为他们虽然是不同的参数,但是他们都与一种技术有关,叫做缓存(cache).
innodb_old_blocks_pct 是innodb buffer pool 对应的参数.
key_cache_dividion_limit 是 key cache 对应的参数.
下面讲讲这两个cache的基本原理.
cache在整体表现上是内存的一个链表,这个链表是保存硬盘上的数据的,详细请自行 百度.
在cache大家族中,有一类结构叫做LRU(Last Recent Used). 有一个对于这个结构的使用的算法,叫做Midpoint Insertion Strategy.
这个算法就会控制cache的命中率,基本上来说,这个算法是将一个LRU链表分为热端和冷端.热端只有经过一定的失效期才能被分配到冷端,
而冷端经过一定的失效期会被请出队列.新进的数据只会被放置到冷端,在冷端多次命中后才能被放置到热端.冷端热端都属于cache, 命中后性能会很高.
那么上面的两个参数是控制什么的呢?
是控制冷端和热端的比例的参数
那么,比较好的配置是如果已知活跃数据是占总cache 的百分比,就设置参数为 1-活跃数据量/cache大小.
还有两个参数 key_cache_age_threshold和innodb_old_block_time是定义多久才是从热端到冷端的出队条件,是控制cache变化快慢的参数.
就说这些吧,关键字:Midpoint Insertion Strategy