为什么要有缓冲池?
InnoDB存储引擎是以数据页为单位来管理存储空间的,当我们对MySQL数据库进行增删改查等操作时,其本质都是在访问操作数据页,如读页,写页,新建页等。
因此DBMS会把需要的页数据加载到内存中,然后才可以操作数据页。
在数据库系统中,CPU 速度与磁盘速度之间的差距是非常大的,为了最大可能的弥补之间的差距,提出了缓存池的概念。
所以缓存池,简单来说就是一块「内存区域」,通过内存的速度来弥补磁盘速度较慢,导致对数据库造成性能的影响。
缓存池的基本原理
「读操作」:
在数据库中进行读取页的操作,首先把从磁盘读到的页存放在缓存池中,下一次读取相同的页时,首先判断该页是不是在缓存池中。
若在,称该页在缓存池中被命中,则直接读取该页,否则,还是去读取磁盘上的页。
「写操作」:
对于数据库中页的修改操作,首先修改在缓存池中的页,然后在以一定的频率刷新到磁盘,并不是每次页发生改变就刷新回磁盘,而是通过 checkpoint 的机制把页刷新回磁盘。
可以看到,无论是读操作还是写操纵,都是对缓存池进行操作,而不是直接对磁盘进行操纵。
缓存原则:
缓冲池是将数据缓存到内存中,内存是有大小限制的,MySQL缓冲池具体的大小支持设置,我们不可以把所有数据都缓存到内存中,因此缓存数据是有优先级的
MySQL缓冲池缓存机制是遵循LRU淘汰机制(即最近最少使用被淘汰),MySQL在LRU基础上做了冷热数据的分离,使得缓存更加高效。
预加载:
DBMS会把需要数的数据页前后的数据页一起加载到缓冲池,当我们需要查前后数据数据时会更加高效.
为了防止缓存了没有使用到的数据页,,数据第一次被加载会放入冷数据区,如果在设定时间中没有被使用,数据是不会放热数据区,在冷数据区会遵循LRU机制被淘汰。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?