,以便生成最佳的執行計劃。而在oracle 9i之前的版本中,Oracle 只根據統計信息來做出執行計劃。
一、綁定變量窺探
??? 使用SQL首次運行時的值來生成執行計劃。后續再次運行該SQL語句則使用首次執行計劃來執行。
??? 影響的版本:Oracle 9i, Oracle 10g
??? 對于綁定變量列中的特殊值或非均勻分布列上的綁定變量會造成非高效的執行計劃被選擇并執行。
???
??????? 要注意的是,Bind Peeking只發生在硬分析的時候,即SQL被第一次執行的時候,之后的變量將不會在做peeking。我們可以看出,Bind
??? peeking并不能最終解決不同謂詞導致選擇不同執行計劃的問題,它只能讓SQL第一次執行的時候,執行計劃選擇更加準確,并不能幫助OLAP
??? 系統解決綁定變量導致執行計劃選擇錯誤的問題。這也是OLAP不應該使用綁定變量的一個原因。
??????? 更確切地說,綁定變量窺探是在SQL解析的物理階段,查詢優化器將會窺探綁定變量的值并將其作為字面量來使用。即ORACLE首次解析
??? SQL時會將變量的真實值代入產生執行計劃,后續對所有使用該綁定變量SQL語句都采用首次生存的執行計劃。如此這般?那性能究竟如何?
??? 結果是并非最佳的執行計劃的使用。此問題在Oracle 11g中得以解決。??
??????? 請參考:
Oracle自適應共享游標
二、示例綁定變量窺探
??? 1、創建演示環境???????
??? 2、未使用綁定變量情形下SQL語句的執行計劃???????
??? 3、使用綁定變量情形下的執行計劃?????????????
三、總結
??? 從上面的演示可以,由于綁定變量窺探特性,對于后續生成的執行計劃,不僅套用了首次生成的執行計劃,而且執行計劃中的Row,Bytes,
Cost(%CPU)等都與首次生存執行計劃得值相同。由此可知,盡管可以使用綁定變量解決OLTP系統中大量重復SQL的反復解析的問題。但綁定變量
可能會導致SQL語句選擇非最佳的執行計劃。尤其是對于存在數據傾斜的列,且生成了直方圖更不宜于使用綁定變量。在Oracle 11g 中,自適
應特性從一定程度解決了綁定變量窺探所導致的問題。
四、延伸參考
???
Oracle自適應共享游標
???
綁定變量及其優缺點
?
???
父游標、子游標及共享游標
?
???
dbms_xplan之display_cursor函數的使用
?
???
dbms_xplan之display函數的使用
?
???
執行計劃中各字段各模塊描述
???
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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