1

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

  1. 常用 RDBMS(如 Oracle、SQL Server、MySQL、PostgeSQL 等)中的每个 SELECT 是否总是意味着从磁盘读取数据的行程,或者它们是否在硬件允许的范围内缓存常用请求的数据以避免昂贵的输入输出操作?

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

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

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

谢谢

4

2 回答 2

2

I'll answer for SQL Server:

  1. Reads are served from cache if possible. Else, an IO occurs.
  2. From what has been written and from what I observe, it is an LRU algorithm. I don't think this is documented anywhere. The LRU items are database pages of 8KB.
  3. SQL Server is the only process which has access to the database files. So no other process can cause modifications. Regarding concurrent transactions: Multiple transactions can modify the same page. Locking (mostly at row-level, sometimes page or table level) ensures that the transactions do not disturb each other.
  4. I don't know.
于 2012-11-21T22:16:49.633 回答
1

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

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