Mysql-数据库缓冲池(Buffer pool)
Buffer pool的作用InnoDB 存储引擎是以页为单元来管理存储空间的,我们举行的增删改查操作实在本质上都是在访问页面(包罗读页面、写页面、创建新页面等操作)。而磁盘 I/O 必要消耗的时间许多,而在内存中举行操作,服从则会高许多,为了能让数据表或者索引中的数据随时被我们所用,DBMS 会申请占用内存来作为数据缓冲池 ,在真正访问页面之前,必要把在磁盘上的页缓存到内存中的 Buffer Pool 之后才可以访问。如许做的好处是可以让磁盘活动最小化,从而 淘汰与磁盘直接举行 I/O 的时间。要知道,这种计谋对提升 SQL 语句的查询性能来说至关紧张。如果索引的数据在缓冲池里,那么访问的成本就会降低许多。即申请一块内存提前从磁盘中读取数据到内存,后续mysql访问数据都从Buffer pool 这个缓冲池里访问,淘汰了磁盘IO的次数,提高查询服从
缓冲池(Buffer Pool)
在 InnoDB 存储引擎中有一部分数据会放到内存中,缓冲池则占了这部分内存的大部分,它用来存储各种数据的缓存,由下图可以看到 InnoDB 缓冲池包罗了数据页、索引页、插入缓冲、锁信息、自顺应 Hash 和数据字典信息等。
https://i-blog.csdnimg.cn/direct/67de87d85e0f47d5bc0c86219e3c116e.png
缓存原则:
“ 位置 * 频次 ”这个原则,可以帮我们对 I/O 访问服从举行优化。
[*]起首,位置决定服从,提供缓冲池就是为了在内存中可以直接访问数据。
[*]其次,频次决定优先级序次。因为缓冲池的大小是有限的,好比磁盘有 200G,但是内存只有 16G,缓冲池大小只有 1G,就无法将所有数据都加载到缓冲池里,这时就涉及到优先级序次,会优先对使用频次高的热数据举行加载。
缓冲池的预读特性:
缓冲池的作用就是提升 I/O 服从,而我们举行读取数据的时间存在一个“局部性原理”,也就是说我们使用了一些数据,大概率还会使用它周围的一些数据,因此采用“预读”的机制提前加载,可以淘汰未来可能的磁盘 I/O 操作。
缓冲池如何读取数据:
缓冲池管理器会尽量将常常使用的数据保存起来,在数据库举行页面读操作的时间,起首会判定该页面 是否在缓冲池中,如果存在就直接读取,如果不存在,就会通过内存或磁盘将页面存放到缓冲池中再举行读取。
缓存在数据库中的布局和作用如下图所示:mysql通过存储引擎读取到缓冲池,再从缓冲池读取数据,缓冲池就是前言。
https://i-blog.csdnimg.cn/direct/6606d3de2279438da743e2c7606fff5a.png
如果我们执行 SQL 语句的时间更新了缓存池中的数据,那么这些数据会立刻同步到磁盘上吗?
实际上,当我们对数据库中的记录举行修改的时间,起首会修改缓冲池中页里面的记录信息,然后数据库会以肯定的频率革新到磁盘中。注意并不是每次发生更新操作,都会立即举行磁盘回写。缓冲池会采用一种叫做 checkpoint 的机制 将数据回写到磁盘上,如许做的好处就是提升了数据库的整体性能。
好比,当缓冲池不敷用时,必要释放掉一些不常用的页,此时就可以强行采用checkpoint的方式,将不常用的脏页回写到磁盘上,然后再从缓存池中将这些页释放掉。这里的脏页 (dirty page) 指的是缓冲池中被修改过的页,与磁盘上的数据页差别等。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]