SQL多版本控制 - _CURSOR_OBSOLETE_THRESHOLD

pxbibm發表於2015-07-01
SQL多版本控制 - _CURSOR_OBSOLETE_THRESHOLD

在蓋老師的公開課中,提到了一個控制SQL多版本的引數,有很多朋友討論,這個引數是:_CURSOR_OBSOLETE_THRESHOLD 。

為什麼會有這個引數呢?請看下面這個示意圖,這是一個真實的生產環境,第一個SQL顯示,其Version Count已經達到了26萬個,這不僅僅佔用了記憶體,而且會使得SQL解析延遲:

SQL多版本控制 - _CURSOR_OBSOLETE_THRESHOLD
對於版本過多的SQL,一次軟解析甚至不如重新執行一次硬解析來的高效,所以Oracle引入了一系列的控制手段來處理這些特殊的遊標。

在11.2.0.3之後,這些解決方案最終形成了一個隱含引數,也就是 _CURSOR_OBSOLETE_THRESHOLD,其作用是當SQL版本超過這個引數設定後,直接捨棄這個遊標,重新解析,重頭開始。在這一版本之前,透過補丁和引數("_cursor_features_enabled" 和 event 106001)可以達成類似的效果。


Oracle的很多細節控制都是體貼入微的,且用且珍惜吧

關於SQL的多版本,MOS文章 296377.1 非常值得仔細看看。

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

相關文章