cursor_sharing : exact , force , similar

tolywang發表於2010-11-10
在Oracle 9i中,cursor_sharing引數有了第3個選項:similar。該引數指定Oracle在存在柱狀圖資訊時,對於不同的變數值,重新解析,從而可以利用柱狀圖更加精確地制定SQL執行計劃。也即當存在柱狀圖資訊時,similar的表現和exact相同;當柱狀圖資訊不存在時,similar的表現和force相同。

但是需要注意的是,在某些版本中(如:Oracle 9.2.0.5),設定cursor_sharing為similar可能導致SQL的version_count過高的Bug,該選項在不同版本中都可能存在問題,是需要斟酌使用的一個引數,設定該引數不過是一個臨時的解決辦法,根本的效能提升仍然需要透過最佳化SQL來解決。

除了Bug之外,在正常情況下,由於Similar的判斷機制,可能也會導致SQL無法共享。在收集了柱狀圖(Hisogram)資訊之後,如果SQL未使用繫結變數,當SQL使用具備柱狀圖資訊的Column時,資料庫會認為SQL傳遞過來的每個常量都是不可靠的,需要為每個SQL生成一個Cursor,這種情況被稱為UNSAFE BINDS。大量的version_count可能會導致資料庫產生大量的cursor:pin S wait on X等待。解決這類問題,可以設定cursor_sharing為FORCE或者刪除相應欄位上的柱狀圖資訊。  

 

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

相關文章