我們最近更新到Oracle 11g,我們的DBA建議使用結果緩存來提高我們某些查詢的性能。 Google的快速搜索顯示該功能有一些criticism以及它如何擴展。就像任何緩存方案一樣,它會在很大程度上贏得很大的時間和其他情況下失敗的情況。我們的使用模式(對數據庫多次詢問相同位的信息很少發生變化)似乎非常適合結果緩存。您對Oracle的結果緩存功能有什麼經驗?
你對這項功能有正面或負面的經驗嗎?
我們最近更新到Oracle 11g,我們的DBA建議使用結果緩存來提高我們某些查詢的性能。 Google的快速搜索顯示該功能有一些criticism以及它如何擴展。就像任何緩存方案一樣,它會在很大程度上贏得很大的時間和其他情況下失敗的情況。我們的使用模式(對數據庫多次詢問相同位的信息很少發生變化)似乎非常適合結果緩存。您對Oracle的結果緩存功能有什麼經驗?
你對這項功能有正面或負面的經驗嗎?
我會非常警惕任何試圖在數據庫緩存中的所有查詢results--,這是非常有可能會造成很多額外的工作維持那些不會受益查詢的90%的結果緩存。 Oracle的高速緩存失效算法非常基本,並且旨在確保永不返回陳舊結果,因此對基礎表的任何更改都將強制從該表派生的所有結果高速緩存失效。假設你的大部分查詢都是按照一定頻率改變的表格,那麼這可能不值得開銷。你真的只想緩存那些運行起來很昂貴的結果(否則,緩存結果的邊際好處,而不是緩存數據到緩衝區緩存中,就像Oracle已經做的那樣是微乎其微的)緩存一個單一的緩存,中行的主鍵查找很可能永遠不會是值得的) - 是的一段合理的時間常數(確保別人可以使用緩存) - 參考表被大多是靜態的(確保你沒有花當你對錶執行DML時,大量的時間使緩存的結果無效)
我們的第一個(也是非常初步的)測試顯示了相當的希望。由於我們正在測試的查詢中的緩存命中可以避免全表掃描(約350萬行),即使只有幾次命中,也很容易使緩存變得有價值。
到目前爲止,我們只是在做一個查詢,這似乎相當安全。我想設置數據庫來緩存所有結果,但這可能會更危險。
在RAC環境中,我總是看到在同一個實例上有效的返回值, ,但是當它與經常更新表數據的函數一起使用時,我們有抱怨說,當函數在與更新完成的實例不同的實例上調用時,該值過時。