3
?快速搞懂Mysql中BufferPool底层原理?
source link: https://blog.51cto.com/u_13794952/5592710
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主
📌 擅长领域:全栈工程师、爬虫、ACM算法
💒 公众号:知识浅谈
🤞快速搞懂Mysql数据库中BufferPool底层原理🤞
正菜来了⛳⛳⛳
🎈BufferPool缓冲池
缓冲池处于计算机系统主存中的某个区域,用于InnoDB访问时缓存表以及索引数据。缓冲池允许直接从内存访问常用数据,从而加 快处理速度。在专用服务器上,通常多达80%的物理内存分配给缓冲池。
把磁盘中一页页的16k数据原封不动的都加载到Bufferpool中
- 为了提高大量的读取操作,缓冲池被划分成可能包含多行的页。为了有效管理这些页的数据,缓冲池被实现为以页为元素的链表。
- 通过一种变体的LRU算法(Least Recently Used Algorithm,最近最少使用算法)使最近最少使用的数据老化(即清除不常用的缓存)。
🎈缓冲池中LRU算法
缓冲池使用LRU算法的变体形成一个列表进行管理,结构如下图所示。当缓冲池需要添加新页的时候,最近最少使用的页会被驱逐,并且一个新页会被添加到列表的中间(注意,并不是列表的正中间,具体值由LU算法的变体决定)。这个中点插入策略将缓冲池列表逻辑上分割成两个子列表。
- 列表头部至中间点的数据,被视为是最近常访问的,下文称这些为年轻页
- 中间点至列表尾部的数据,被视为最近较少访问的,下问称这些为旧页
🎈缓冲池提升性能
- 理想地,你可以根据实际情况将缓冲池的大小设置得尽可能大,从而留出足够多的内存给服务器上的其他进程运行,而不会出现过多的分页。缓冲池越大,noDB就越像一个内存数据库,从磁盘读取数据一次,后续的读取期间从内存访问数据。详情见配置InnoDB缓冲池大小。
- 在具有足够内存的64位系统上,您可以将缓冲池拆分成多个部分,以减少并发操作之间对内存结构的争用。详情见配置多个缓冲池实例。
- 你可以将经常访问的数据保留在内存中,而不管操作的活动突然激增,这些操作会将大量不常用的数据带入缓冲池。详情见使缓冲池扫描具有抵抗性
- 你可以控制如何以及何时执行预读取请求来将分页异步地预取到缓冲池中,以应对即将到来的需求。详情见配置InnoDB缓冲池预取(预读)
- 你可以控制后台何时刷新以及是否根据工作负载动态调整刷新速率。详情见配置缓冲池刷新
- 你可以配置1noDB如何保存当前缓冲池的状态来避免服务器重启后长时间的预热。详情见保存和回复缓冲池的状态
以上就是Mysql8中BufferPool底层原理英文翻译的部分解析,希望有所帮助。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK