【发布时间】:2020-10-17 16:10:20
【问题描述】:
InnoDB 使用可配置大小的缓冲区布尔值来存储最近使用的页面(b+树块)。
为什么不用 mmap 整个文件呢?是的,这不适用于更改的页面,因为您希望在写回目标位置之前将它们存储在双写缓冲区中。但是 mmap 让内核管理页面的 LRU 并避免用户空间复制。此外,inkernel-copy 代码不使用向量指令(以避免将它们的寄存器存储在进程上下文中)。
但是当页面没有改变时,为什么不使用 mmap 来读取页面并让内核管理在文件系统内存缓存中缓存它们呢?因此,您只需要更改页面的“自定义”用户空间缓存。
LMDB 作者提到他选择 mmap 方法是为了避免将数据从文件系统缓存复制到用户空间并避免 LRU 重新发明。
我缺少哪些 mmap 的关键缺点导致缓冲池方法?
【问题讨论】:
-
直到最近,数据库大小经常会超出虚拟内存地址范围...