一 简介 buffer pool的并发访问机制的改进与局限
二 详细
1 innodb_buffer_pool_instance
1 当较多数据加载到内存时, 使用多缓存实例能减少缓存争用锁情况。
2 全局大锁 buffer pool mutex 依然存在,直到8.0才进行拆分解决
2 page_cleaner的出现
1 出现了单独的page_cleaner线程,独立承担了刷页工作,减少了master的负担
2 出现了多线程的page_cleaner,加快了脏页刷新的效率
3 page_celaner不能解决的问题
基本就是高并发下page_cleaner超负荷工作时进行的CKPT,周期性的CKPT并不在考虑范围内
1 redo不够用,覆盖前强制进行CKPT
2 LRU列表已到达空闲页最少的阈值,需要强制进行CKPT
4 purge的出现
1 出现了单独的purge线程,独立承担了清理undo和删除标记的工作,减少了master的负担
5 dblwr成为重要的单点瓶颈。
1 非SSD硬盘必须打开double write buffer。
2 涉及到的锁 分为两部分:single page flush和batch flush,
3 即使拆分了多个page cleaner,最终扩展性还是受限于dblwr
4 官方已经开始对此开始优化工作
三 总结
1 只是根据淘宝内核周报写的一点自己的总结,还会继续补充
2 以上出现的几个关键点解读在我的博客里都有体现,感兴趣的可以去看