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

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