MySQL 如何从缓冲池中逐出页面?

How does MySQL evict pages from the buffer pool?

我正在尝试了解 MySQL 的内部结构。我知道 MySQL 的缓冲池管理有一个 old/young 页面列表,如 here. And I do know about the flushing of old dirty pages, such as explained here and how to customize it here. I am also aware that MySQL uses a LRU algorithm for page eviction as here 所示。

但是,是否有一个缓冲池 daemon/thread 可以驱逐通过 select 语句进入缓冲池的只读页面(不是脏页)?有没有办法自定义它(例如,当我通过 95% 的缓冲池容​​量时,开始驱逐读取的页面或刷新脏页)。换句话说,LRU 算法中的什么触发器从缓冲池中逐出页面(例如,页面在缓冲池中的时间、缓冲池填充的百分比、需要逐出页面以加载新页面),这些是否可调?

刷新和逐出是完全不同的。

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,因此对于脏页面的构建没有太多的容忍度(尽管,正如您从 link 你引用实际的冲洗时间表计算有点复杂)。

它们被刷新后,当它们是 LRU 时,它们将被驱逐。

MySQL 使用 LRU 和 "midpoint insertion strategy" 方法。 https://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_midpoint_insertion_strategy