所有表的数据页存都放在 buffer pool 中,查询执行的时候如果需要的数据页直接命中 buffer pool,则就没有物理 IO 的产生,SQL 执行的效率较高,buffer pool采用 LRU 算法管理缓存的数据页,所有的脏页放到 Flush list 链表。RDS MySQL InnoDB buffer pool 的大小设置为规格内存的 75%,这部分内存通常是实例内存中占比最大的。
buffer pool 相关的常见问题:
数据页没有足够的预热,导致查询的延迟较高。通常发生在实例发生过重 启、冷数据读取或内存不足,缓冲池命中率较低的场景,建议升级实例规 格或大促前预热数据来避免这种问题。
脏页累计太多。当当前未刷脏的最老 lsn 和当前 Lsn 的距离超过 76%时, 会触发用户线程同步刷脏,引发实例严重的性能下降。优化方式是业务均 衡写负载,避免写入吞吐过高、调整刷脏参数、升级实例规格等。
大规格内存实例 innodb_buffer_pool_instances 设置较小,高 QPS 负载情况下,缓冲池的锁竞争会比较激烈。建议高规格内存的实例 innodb_buffer_pool_instances 设置为 8 或 16,甚至更高。
资源来源于《阿里云数据库运维实战问题改》
https://developer.aliyun.com/topic/download?spm=a2c6h.20345107.J_6399686890.1.2e1e17dbzKUX5r&id=8198
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。