天天看點

[20120327]Adaptive Cursor Sharing 的問題

[20120327]Adaptive Cursor SharingG 的問題

11G的新特性裡面Adaptive Cursor Sharing采用新特性來解決PEEKED BIND的問題,但是必須要經過一次執行後,來改變執行計劃。

但是如果在一些工具裡面,它執行并不是提取全部的資訊,而是取一部分就會遭遇執行計劃不改變的問題。

如下站點:

http://jonathanlewis.wordpress.com/2012/03/21/acs/

按照講解是一個BUG,但是沒有給出例子,自己寫個例子測試如下:

1.建立測試環境:

2.執行sql語句,為了更好測試,我在toad執行,:a :=1 :

3.在toad下執行相同的sql語句,但是帶入的參數是1001:

--執行多次,參數1001,可以發現執行計劃并沒有産生子光标。

再次執行在toad下執行相同的sql語句,但是帶入的參數是1001:

--可以發現并沒有産生新的子光标.換句話講Adaptive Cursor Sharing并沒有起作用。

現在toad打開auto trace(具體操作是在sql編輯器裡面,點選右鍵選擇auto trace),主要目的是這樣可以提取全部查詢資訊。

再次執行以上語句。參數1001

--可以發現現在出現了新的子光标。

--可以發現child_number=0 的子光标IS_SHAREABLE='N'.

5.如果要避免這樣的問題,最好的方法是使用提示/*+ bind_aware */.