mysql - MySQL 如何从缓冲池中逐出页面?
问题描述
我正在尝试了解 MySQL 的内部结构。我知道 MySQL 的缓冲池管理有一个旧/新页面列表,如此处所示。而且我确实知道旧脏页的刷新,例如here以及如何自定义here。我也知道 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
推荐阅读
- python - pip install geopandas:命令出错,退出状态为 1:python setup.py egg_info 检查日志以获取完整的命令输出
- javascript - 有没有办法在“.m3u8”视频文件中附加开始时间
- php - 替换 SquareBrackets 中的值并使用 php 循环它
- excel - 如何在 VBA 中使用组合框值设置 If Then
- display - P10 显示时序图 - PIC 单片机
- angular - 使用 ionic 和 Angular 检查站点/网站/域/IP 是否处于活动状态
- java - 值未存储在实时数据库 Firebase 中
- node.js - 制作票证时出现问题 discord JS
- extjs - 为什么模板列在现代工具包 EXTJS 中不起作用
- git - 使用 Git fork 的主分支和多个功能分支