2012-11-21 23 views
1

我對領先的RDBMS如何執行檢索數據知之甚少。所以,這些問題可能看起來有點簡陋:RDBMS緩存與磁盤I/O - 跨供應商比較

  1. 是否每個選擇常用的RDBMS如Oracle,SQL服務器,MySQL和PostgeSQL等總是意味着一趟從磁盤讀取數據,或者做自己,在一定程度上可以被硬件所允許,緩存通常要求的數據以避免昂貴的I/O操作?

  2. 他們如何確定要緩存哪些數據段?

  3. 一旦某個緩存數據的更新由不同的進程發生,他們如何去同步緩存?

  4. 是否有關於不同的RDBMS緩存經常請求的數據的比較矩陣?

感謝

回答

1

爲Informix的答案是非常相似的SQL Server給出的:

  1. 讀,寫操作都使用高速緩存,如果在所有可能的。如果所需頁面尚不在緩存中,則會發生適當的I/O操作集合(通常,從緩存中逐出某個頁面,也許是在讀入新頁面之前必須寫入的髒頁面,然後閱讀新的頁面舊的那個頁面)。
  2. 有各種算法,但頁面大小和用法是關鍵部分。每個頁面大小都有LRU隊列。
  3. DBMS作爲一個整體是在共享內存中使用緩衝池的過程集合(並且在可能的情況下,直接使用磁盤I/O而不是通過內核高速緩存),並使用各種形式的鎖定(信號量,自旋鎖,互斥鎖等)來處理併發和同步。 (在Windows上,Informix使用具有多個線程的單個進程;在Unix上,它使用多個進程。)
  4. 可能不是。
2

我會回答的SQL Server:

  1. 讀操作,從緩存如果可能的服務。否則,發生IO。
  2. 從寫的內容和我觀察到的情況來看,它是一種LRU算法。我不認爲這是記錄在任何地方。 LRU項目是8KB的數據庫頁面。
  3. SQL Server是唯一可以訪問數據庫文件的進程。所以沒有其他進程可以導致修改。關於併發事務:多個事務可以修改同一頁面。鎖定(主要在行級別,有時是頁面或表級別)確保交易不會相互干擾。
  4. 我不知道。