繁体   English   中英

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

[英]How does MySQL evict pages from the buffer pool?

我试图了解 MySQL 的内部结构。 我知道,MySQL的缓冲池管理有一个老/年轻页面列表,显示在这里 而且我确实了解旧脏页的刷新,例如在此处解释以及如何在此处进行自定义。 我也知道,MySQL使用的页收回一个LRU算法是在这里

但是,是否有一个缓冲池守护进程/线程可以驱逐通过 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,因此对于脏页面的构建没有太多的容忍度(尽管,正如您从链接中知道的,您引用了实际的刷新计划计算有点复杂)。

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

MySQL 使用带有“中点插入策略”方法的 LRU。 https://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_midpoint_insertion_strategy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM