Oracle資料庫高效能祕密之資料快取記憶體

it_newbalance發表於2012-10-11
使用過Oracle資料庫的人都知道,Oracle資料庫的執行速度與效率,在同類資料庫中是名列前茅的,特別是對大量資料進行訪問時,更加有出色的表現。那麼,Oracle資料庫是靠什麼實現的呢?筆者下面將通過一系列的文章,向大家展示Oracle資料庫提供高效能運算的祕密。

  Oracle資料庫作為複雜運算的首選資料庫,其首先是通過所謂的資料快取記憶體來實現對資料的高速運算與操作的。

  資料快取記憶體跟作業系統的快取類似,其儲存最近從資料檔案中讀取的資料塊,其中的資料可以被所有的使用者所訪問。如當我們利用Select語句從資料庫中查詢員工資訊的時候,其首先不是從資料檔案中去查詢這個資料,而是從資料快取記憶體中去查詢,而沒有這個必要再去查詢磁碟中的資料檔案了。只有在資料快取中沒有這個資料的時候,資料庫才會從資料檔案中去查詢。Oracle資料庫為什麼要如此設計呢?這是由於資料庫在讀取資料的時候,讀取記憶體的速度比讀取磁碟的速度要快很多倍,所以這種機制可以提高資料的整體訪問效率。

  雖然其他資料庫也有這方面的設計,但是,相對來說,Oracle資料庫比其他資料庫,在這方面有更加出色的表現。難怪Oracle資料庫在記憶體的要求上,比其他資料庫要高。若以稍微的代價犧牲一些記憶體,而換取更高的資料訪問效能。筆者認為還是值得的。下面我們就來看看,Oracle資料庫在資料快取記憶體上有哪些特殊的表現。

  一、 空閒快取塊。

  當我們重新啟動資料庫後,系統就會為資料庫分配一些空閒的快取塊。空閒快取塊中是沒有任何資料的,他在那邊默默的等著別寫入記錄。當Oracle 資料庫從資料檔案中讀取資料後,資料庫就會尋找是否有空閒的快取塊,以便將資料寫入其中。

  一般來說,資料庫在啟動的時候,就會在記憶體中預先分配這些快取塊。所以,Oracle資料庫在啟動的時候,會佔用比較多的記憶體。但是,這可以免去在實際需要時向記憶體申請的時間。所以,有時候Oracle資料庫雖然已啟動,記憶體的佔用率就很高,但是,其後續仍然可以正常執行的原因。而其他資料庫雖然剛啟動的時候記憶體佔用率不是很高,但是,但系統記憶體到達80%以上時,在進行資料處理就會受到明顯的影響。

  所以,當我們利用SELECT語句從資料庫檔案中讀取檔案的時候,資料庫首先會尋找是否有空閒的快取。

  二、 命中快取塊。

  當SELECT語句先從資料庫檔案中讀取資料後,會把取得的資料放入到這個命中快取塊中。也就是說,當我們利用查詢語句從資料庫查詢處員工資訊後,這個資訊就會被儲存在快取記憶體中。直道快取記憶體消耗完畢等原因,這個空間才會被釋放。如此的話,下次使用者在查詢員工資訊的時候,就不需要從資料庫檔案中再次查詢相關資訊,而直接從資料快取記憶體中提取資料,從而提高資料庫的訪問效率。

  另外要注意的一個問題是,命中快取塊中的資料不會被寫入資料檔案。確實,這個命中快取塊中的資料沒有被更改,其當然也不會被寫入資料庫檔案中。  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24558279/viewspace-746183/,如需轉載,請註明出處,否則將追究法律責任。

相關文章