Mysql-数据库缓冲池(Buffer pool)

打印 上一主题 下一主题

主题 840|帖子 840|积分 2520

Buffer pool的作用

   InnoDB 存储引擎是以页为单元来管理存储空间的,我们举行的增删改查操作实在本质上都是在访问页面(包罗读页面、写页面、创建新页面等操作)。而磁盘 I/O 必要消耗的时间许多,而在内存中举行操作,服从则会高许多,为了能让数据表或者索引中的数据随时被我们所用,DBMS 会申请占用内存来作为数据缓冲池 ,在真正访问页面之前,必要把在磁盘上的页缓存到内存中的 Buffer Pool 之后才可以访问。如许做的好处是可以让磁盘活动最小化,从而 淘汰与磁盘直接举行 I/O 的时间。要知道,这种计谋对提升 SQL 语句的查询性能来说至关紧张。如果索引的数据在缓冲池里,那么访问的成本就会降低许多。即申请一块内存提前从磁盘中读取数据到内存,后续mysql访问数据都从Buffer pool 这个缓冲池里访问,淘汰了磁盘IO的次数,提高查询服从
  缓冲池(Buffer Pool)

在 InnoDB 存储引擎中有一部分数据会放到内存中,缓冲池则占了这部分内存的大部分,它用来存储各种数据的缓存,由下图可以看到 InnoDB 缓冲池包罗了数据页、索引页、插入缓冲、锁信息、自顺应 Hash 和数据字典信息等。

缓存原则:

“ 位置 * 频次 ”这个原则,可以帮我们对 I/O 访问服从举行优化。
   

  • 起首,位置决定服从,提供缓冲池就是为了在内存中可以直接访问数据。
  • 其次,频次决定优先级序次。因为缓冲池的大小是有限的,好比磁盘有 200G,但是内存只有 16G,缓冲池大小只有 1G,就无法将所有数据都加载到缓冲池里,这时就涉及到优先级序次,会优先对使用频次高的热数据举行加载。
   缓冲池的预读特性:

   缓冲池的作用就是提升 I/O 服从,而我们举行读取数据的时间存在一个“局部性原理”,也就是说我们使用了一些数据,大概率还会使用它周围的一些数据,因此采用“预读”的机制提前加载,可以淘汰未来可能的磁盘 I/O 操作。
  

缓冲池如何读取数据:

缓冲池管理器会尽量将常常使用的数据保存起来,在数据库举行页面读操作的时间,起首会判定该页面 是否在缓冲池中,如果存在就直接读取,如果不存在,就会通过内存或磁盘将页面存放到缓冲池中再举行读取。
缓存在数据库中的布局和作用如下图所示:mysql通过存储引擎读取到缓冲池,再从缓冲池读取数据,缓冲池就是前言。

 
如果我们执行 SQL 语句的时间更新了缓存池中的数据,那么这些数据会立刻同步到磁盘上吗?
   实际上,当我们对数据库中的记录举行修改的时间,起首会修改缓冲池中页里面的记录信息,然后数据库会以肯定的频率革新到磁盘中。注意并不是每次发生更新操作,都会立即举行磁盘回写。缓冲池会采用一种叫做 checkpoint 的机制 将数据回写到磁盘上,如许做的好处就是提升了数据库的整体性能。
  好比,当缓冲池不敷用时,必要释放掉一些不常用的页,此时就可以强行采用checkpoint的方式,将不常用的脏页回写到磁盘上,然后再从缓存池中将这些页释放掉。这里的脏页 (dirty page) 指的是缓冲池中被修改过的页,与磁盘上的数据页差别等。
   
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

商道如狼道

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表