RDBMS缓存与磁盘I / O - 跨供应商的比较

时间:2012-11-21 22:07:31

标签: sql database relational-database rdbms

我对领导RDBMS如何检索数据知之甚少。所以这些问题可能看起来有点简陋:

  1. 常用的RDBMS中的每个SELECT(例如Oracle,SQL Server,MySQL,PostgeSQL等)是否总是意味着从磁盘读取数据的行程,或者在某种程度上由硬件允许,它们通常是缓存请求数据以避免昂贵的I / O操作?

  2. 他们如何确定要缓存的数据段?

  3. 一旦某个缓存数据的更新由不同的进程发生,他们如何同步缓存?

  4. 是否有关于不同RDBMS如何缓存频繁请求的数据的比较矩阵?

  5. 由于

2 个答案:

答案 0 :(得分:2)

我将回答SQL Server:

  1. 如果可能,从缓存提供读取。否则,就会发生IO。
  2. 从写过的内容和我观察到的内容来看,它是一种LRU算法。我不认为这有任何记录。 LRU项目是8KB的数据库页面。
  3. SQL Server是唯一可以访问数据库文件的进程。因此没有其他过程可以导致修改。关于并发事务:多个事务可以修改同一页面。锁定(主要在行级,有时是页面或表级)确保事务不会相互干扰。
  4. 我不知道。

答案 1 :(得分:1)

Informix的答案与SQL Server的答案非常相似:

  1. 如果可能的话,读取和写入都使用缓存。如果所需页面尚未存在于缓存中,则会发生适当的I / O操作集合(通常是从缓存中逐出某些页面,可能是在读入新页面之前必须写入的脏页面,然后读取新页面)旧页面的页面。)
  2. 有各种算法,但页面大小和用法是关键部分。每个页面大小都有LRU队列。
  3. DBMS作为一个整体是在共享内存中使用缓冲池的进程集合(并且在可能的情况下,直接磁盘I / O而不是通过内核缓存),并使用各种形式的锁定(信号量,自旋锁,互斥锁等)来处理并发和同步。 (在Windows上,Informix使用具有多个线程的单个进程;在Unix上,它使用多个进程。)
  4. 可能不是。