Oracle 結果記憶體行為
Oracle 預設記憶體查詢結果和函式結果(Buffer cache)。
我在
AutoTrace
實用程序中註意到了這一點,第一次執行時物理讀取量很大,但從下一次執行開始,它會大大減少。那麼查詢結果記憶體、函式結果記憶體的重要性是什麼?
我還注意到,即使我嘗試更新物理表,緩衝區記憶體也不會失效。但我仍然注意到物理讀取為 0。
有人可以幫助更好地理解嗎?
預設情況下,Oracle不記憶體查詢和函式結果,但兩者都存在記憶體。
http://www.oracle.com/technetwork/articles/sql/11g-caching-pooling-088320.html
這些的重要性:不僅僅是記憶體塊。即使您處理記憶體中的所有內容,如果您已經知道答案,為什麼還要一次又一次地處理相同的請求?
當提到自動跟踪和物理讀取時,您指的是緩衝區記憶體。
“我還注意到,即使我嘗試重新啟動伺服器,緩衝區記憶體也不會失效。”
這是一個錯誤的結論。當您重新啟動數據庫時,緩衝區記憶體將再次為空。發布證實相反的測試。
沒有“結果記憶體”。有數據庫緩衝區記憶體。Oracle 將最近訪問的數據塊儲存在記憶體中,這樣它就不必每次都去磁碟尋找熱塊——那些最常訪問的數據塊。不儲存函式和查詢結果,只儲存需要的數據塊。看這裡:
http://docs.oracle.com/cd/B28359_01/server.111/b28318/memory.htm#CNCPT1223
Oracle 數據庫使用者程序第一次需要特定數據時,它會在數據庫緩衝區記憶體中搜尋數據。如果程序發現數據已經在記憶體中(記憶體命中),它可以直接從記憶體中讀取數據。如果程序在記憶體中找不到數據(記憶體未命中),它必須在訪問數據之前將數據塊從磁碟上的數據文件複製到記憶體中的緩衝區。通過記憶體命中訪問數據比通過記憶體未命中訪問數據更快。
因此,如果您在重新啟動後看到特定 SQL 首次執行的物理讀取為 0,這意味著其他一些 SQL 已經將相關數據塊載入到緩衝區記憶體中。