1. 程式人生 > >Oracle 自適應遊標

Oracle 自適應遊標

自適應遊標

1

自適應遊標共享Adaptive Cursor Sharing或擴展的遊標共享(Extended Cursor Sharing)是Oracle 11g的新特性之一,主要用於解決以前版由於綁定變量窺探導致SQL語句無法獲得最佳執行計劃的缺陷,即能夠對效率低下的遊標(子遊標)進行自動識別而選擇最佳的執行計劃。


2 使用綁定變量執行SQL語句並獲得首次執行情況


3 自適應遊標共享的外在體現
自適應遊標共享主要通過三個字段來得以體現,即is_bind_sensitive,is_bind_aware,is_shareable。(註:此三個字段僅在Oracle 11g
中存在)。通過上面從v$sql(v$sqlarea中不存在is_shareable)的查詢可知,三個字段分別被賦予了不同的值,代表了不同的含義。


is_bind_sensitive(綁定是否敏感)
表示該子遊標中是否使用了綁定變量要素,且采用bind peeking方法進行執行計劃生成。如果執行計劃依賴於窺探到的值,此處為Y,
否則為N。

is_bind_aware(綁定是否可知)
表示該子遊標是否使用了extended cursor sharing技術,是則為Y,否則為N,如為N,則該遊標將廢棄,不再可用。

is_shareable(是否可共享)
表示該子遊標可否被下次軟解析是否可共享使用。可共享則為Y,否則為N,表示該子遊標失去了共享價值,按LRU算法淘汰。

由於該SQL語句為首次執行,因此從v$sql查詢的結果中得知
is_bind_sensitive 為Y值(首次運行,執行了bind peeking)
is_bind_aware 為N值(首次運行,不被extended cursor sharing支持)
is_shareable 為Y值(執行計劃可共享)


1、自適應遊標共享在SQL語句首次執行時(使用綁定變量),進行窺探,並記錄窺探結果,如果後續有相同的的SQL語句執行,則對窺探結果進行比較以判斷是否需要生成新的執行計劃。此即為綁定變量是否敏感。
2、綁定變量的可知性用於判斷當前的遊標是否為可擴展性遊標共享,當不可知時,則遊標被廢棄。

3、自適應遊標共享的實質是在Oracle 10g以前的基礎上實現了多次綁定變量窺探,增加了獲取最佳執行計劃選擇的機率。
4、盡管使用自適應遊標共享特性,但並不能保證每次執行SQL語句一定按最佳計劃執行。
5、自適應遊標共享也不能保證兩次執行相同SQL語句一定按相同的執行計劃執行,因為自適應遊標共享會不斷嘗試peeking。


本文出自 “ORACLE” 博客,請務必保留此出處http://2012ivan.blog.51cto.com/5241776/1968009

Oracle 自適應遊標