? Buffer cache 和 share pool 是sga中最重要最復雜的部分。
?
一.Buffer Cache
? ? 通常數據的讀取、修改都是通過buffer cache 來完成的。buffer cache 中的數據 ,oracle是通過LRU 和dirty list 這樣的鏈表來管理的。
除了這2個,還有 hash bucket 和 cache buffer chain
?hash bucket:查找方法類似老式圖書館查書
?
二.Shared Pool
? ? ?1.shared pool 是oracle sga中重要的一部分,它主要作用是 sql共享、減少代碼硬解析等
? ? ? ? shared_pool_size設置:oracle9以后,設置成200-300M是比較合適的
?
? ? ?2.ora-04031問題
? ? ? ? 當嘗試在共享內存分配大的連續內存失敗后,oracle會清空沒用的對象,嘗試合并內存;如果仍然沒有足夠大的內存空間,就提供ora-04031.
? ? ? ? 如果shared_pool_size 設置的夠大,也不存在系統bug;那么大部分引起該問題的原因:共享池中大量的sql引起過多的內存碎片導致
? ? ? ? 1)sql沒有足夠的共享空間
? ? ? ? 2)大量不必要的解析
? ? ? ? 3)sql沒有使用綁定變量
? ? ? ??
? ? ? ? 另外,雖然可以通過強制刷新系統共享內存以達到共享內存碎片合并目的,但該操作是不推薦的。
? ? ? ? alter system flush shared_pool。
?
? ? ? ? 實際上,share pool的調整根本是從應用入手,應用代碼的編寫、調整才是根本。
?
? ? ?3.Version_count 過高的現象:
? ? ? ? ? ? ? 應用系統一段時間運行緩慢,一時正常。查看了$session_wait 發現 latch free 比較多。
? ? ? ?通過 v$latch 表查看到 shared pool 和 liberary cache 比較大。
? ? ? ?通過v$sqlarea 查看到 version_count>1000 的有幾個。
? ? ? ?問題解決:1)調整timed_statistics=true 為false
? ? ? ? ? ? ? ? ? ? ? ? ? ? -----該參數是系統對? 比如sql解析、執行、等待等等分別消耗了多少時間進行統計
? ? ? ? ? ? ? ? ? ? ? 2)調整cursor_sharing=similar ?為 force--強制匹配 或者 exact--精確匹配(缺省值) ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? -----該參數是sql強制變量綁定
? ? ? ??
? ? ? ? ? ? ? ? 另外:說明一下cursor_sharing
? ? ? ? ? ? ? ? ? ? ? ?根據oracle官方建議在11g中不推薦使用cursor_sharing=SIMILAR,其實在所有版本中都不推薦,設置為該值很容易導致高版本問題.
? ? ? ? ? ? 而且該值會出現莫名其妙的,無法解釋的高版本問題.而且根據oracle相關文檔,在即將發布的12c版本中,將除掉SIMILAR值.
? ? ? ? ? ? 對于客戶庫的該問題,因為很多sql未綁定參數,為了減少硬解析, 建議在業務低谷時設置cursor_sharing=FORCE,并刷新shared pool.
? ? ?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
