oracle繫結變數窺視有什麼作用?
在oltp系統中繫結變數效能的提高很明顯,這個大家都清楚,但是繫結變數有時也會產生一些不好的執行計畫,特別是需要直方圖的列。
從oracle9i開始提供了繫結變數窺視的功能,就是在oracle第一次解析sql時會將變數的真實值代入產生執行計畫,以後對所有的同樣的繫結變數sql都採用這個執行計畫了。
如果第一次的真實值恰好是比較特殊的值,那這將嚴重影響產生的執行計畫和以後的執行效率.
如果第一次的真實值是比較普通的值,產生的計畫還是一樣,那個這個窺視起什麼作用呢?
對於oracle11g提供新的特性自適應游標共享(adaptive cursor sharing),對於乙個同樣繫結變數的sql可以有多個執行計畫,從而達到動態優化執行計畫的作用,這個還沒有真正試過。
不過根據描述感覺oracle11g要實現這個效果對每個sql的解析及記憶體都增加了,另外以後對於同樣的sql要增加直方圖的判斷,執行計畫cube的判斷,如果結果不一樣那就優化了,但如果判斷的結果一樣,那等於重複做了這些工作,感覺實際應用中99.9%的結果是一樣的,所以11g這樣做增加記憶體增加每個sql的判斷時間值不值,特別是對於高併發的業務系統,大部份的sql的執行時間都很小。
對上都只是我的假想,不過感覺繫結變數窺視的作用的真的不明顯,在oltp系統中對於特殊值還是不用繫結變數更好,在olap中如果特殊值很多建議不要用繫結變數更好。11g的改進不太清楚效果,不過感覺成本比較高。
2008-03-21
mking
什麼是繫結變數,有什麼優缺點?
提到繫結變數,首先肯定想到硬解析和軟解析。繫結變數時解決硬解析的利器。硬解析 就是一條沒有執行過的sql。資料庫首先對他進行語法分析和解析,過後,根據分析的資訊生成最好的執行計畫,然後執行。軟解析 就是已經存在了一樣的sql語句了 繫結變數實質就是變數。類似於我們是用過的替代變數 佔位符 就是在sq...
oracle變數繫結
一 游標 游標可以理解為sql語句的乙個控制代碼,也叫sql語句的指標,游標指向一條sql語句,oracle會話要執行一條sql時,首先要開啟游標。二 sql解析的過程 硬解析步驟 1.對sql語句進行語法檢查,看是否有語法錯誤 2.通過資料字典,檢查sql語句中涉及的物件和列是否存在 3.檢查sq...
oracle 繫結變數
不太喜歡看到在procedure用 拼接sql的語句 所以貼了個繫結變數的例子,僅供參考 create or replace procedure using test t name nvarchar2 as v id char v char begin execute immediate selec...