我正在努力理解MySQL的内部结构。我知道MySQL的缓冲池管理有一个旧的/年轻的页面列表,如下所示。我确实知道旧的脏页的冲洗,比如这里解释的,以及如何在这里定制它。我还注意到,MySQL使用LRU算法进行页面逐出,如下所示。
但是,是否存在一个缓冲池守护进程/线程,将通过select语句引入到缓冲池中的只读页(而不是脏页)逐出?是否有方法对其进行自定义(例如,当我通过95%的缓冲池容量时,开始逐出已读取的页或刷新脏页)。换句话说,LRU算法中的哪些触发器从缓冲池中驱逐页面(例如,页在缓冲池上的时间、填充缓冲池的百分比、为加载新页需要退出页面的百分比),这些是否可调?
发布于 2018-12-26 22:48:36
冲厕和驱逐完全不同。
https://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_同花顺
MySQL将根据innodb_max_dirty_pages_pct刷新脏页。默认的数据库页大小在InnoDB中是16 as,而innodb_max_dirty_pages_pct的最大设置是99,所以对于创建脏页没有太多的容忍度(尽管,从链接中可以知道,实际的冲水计划计算要复杂一些)。
当他们被驱逐后,他们将被驱逐,当他们是LRU时。
文档指出,“当需要空间向缓冲池添加新页时”。所以我可以想象它会一直等到它非常接近满员。关于LRU的一般特性,您可以在其他地方阅读它,因为它不是MySQL特定的。然而,MySQL确实使用了“中点插入策略”,这使得事情不是真正的LRU,以剥夺多余的页面。
https://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_中点_插入_策略
https://dba.stackexchange.com/questions/225815
复制相似问题