数据库缓冲池

数据库缓冲池

数据库缓冲池如何读取数据?
缓冲池管理器会将经常使用的数据保存起来,在数据库页面读操作的时候,进行判断。
首先判断页面是否在缓冲池中,如果存在就直接读取,如果不存在,就会通过内存或磁盘将页面存放在缓冲池中再进行读取。
执行SQL语句的时候更新了缓冲池中的数据,数据是否会马上同步到磁盘上?
对数据库的记录进行修改的时候,首先会修改缓冲池中页里面的记录信息,然后数据库会以一定的频率刷新到磁盘上,并不是每次发生更新操作就会立刻进行磁盘回写。缓冲池会采用一种叫做checkpoint的机制将数据会写到磁盘上,这样做的好处是提高了数据库的整体性能。

比如,当缓冲池不够用时,需要释放一些不常用的页,就可以采用强行checkpoint的方式,将不常用的脏页写到磁盘上,然后再从缓冲池中将这些页都释放掉,这里脏页指的是缓冲池中被修改的页,与磁盘上的数据页不一致。

数据页加载的三种方式

数据库缓冲池中没有需要的页数据,那么缓冲池会存在三种读取数据的方式

  • 内存读取
    如果数据存在于内存中,基本上执行效率在1ms左右,效率很高
  • 随机读取
    如果数据没有在内存中,就需要在磁盘上对该页进行查找,整体时间预估在 10ms 左右,这 10ms 中有 6ms 是磁盘的实际繁忙时间(包括了寻道和半圈旋转时间),有 3ms 是对可能发生的排队时间的估计值,另外还有 1ms 的传输时间,将页从磁盘服务器缓冲区传输到数据库缓冲区中。这 10ms 看起来很快,但实际上对于数据库来说消耗的时间已经非常长了,因为这还只是一个页的读取时间。
  • 顺序读取
    顺序读取其实是一种批量读取的方式,因为我们请求的数据在磁盘上往往都是相邻存储的,顺序读取可以帮我们批量读取页面,这样的话,一次性加载到缓冲池中就不需要再对其他页面单独进行磁盘 I/O 操作了。如果一个磁盘的吞吐量是 40MB/S,那么对于一个 16KB 大小的页来说,一次可以顺序读取 2560(40MB/16KB)个页,相当于一个页的读取时间为 0.4ms。采用批量读取的方式,即使是从磁盘上进行读取,效率也比从内存中只单独读取一个页的效率要高。

数据库读取页的效率总结
如果页在数据库缓冲池中,读取效率最高,如果不在需要去内存和磁盘中读取,相对于磁盘和内存,内存读取效率更高。
如果对单个页读取,效率较低,采用顺序读取的方式批量对页进行读取,平均一页的读取效率就会提升很多,甚至要快于单个页面在内存中的随机读取。

记录极客时间数据库专栏笔记 极客时间

发布了239 篇原创文章 · 获赞 174 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/Maybe_ch/article/details/103106840