我试图了解MySQL的内部。我确实知道MySQL的缓冲池管理有一个旧的/年轻的页面列表,如图所示。而且我确实知道刷新旧的脏页,例如说明的here以及如何自定义here。我还知道,MySQL使用LRU算法将页面驱逐为here。
但是,是否存在缓冲池守护程序/线程,该守护程序/线程驱逐只读通过选择语句进入缓冲池的页面(而不是脏页面)?有什么方法可以自定义它(例如,当我超过缓冲池容量的95%时,开始逐出已读页面或刷新脏页面)。换句话说,LRU算法中的哪些触发因素将页面从缓冲池中逐出(例如,页面在缓冲池中的时间,缓冲池已填充的百分比,需要逐出页面以加载新页面),这些可调吗?
答案 0 :(得分:1)
冲洗和驱逐完全不同。
https://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_flush
MySQL将根据innodb_max_dirty_pages_pct刷新脏页面。 InnoDB中的默认数据库页面大小默认值为16KB,innodb_max_dirty_pages_pct的最大设置为99,因此对脏页面的构建没有很大的容忍度(尽管您从链接中知道,您引用了实际的刷新时间表)计算有点复杂)。
冲洗后,当它们是LRU时将被驱逐。
MySQL使用具有“中点插入策略”方法的LRU。 https://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_midpoint_insertion_strategy