自適應游標共享adaptive cursor sharing或擴充套件的游標共享(extended cursor sharing)是oracle 11g的新特性之一,主要用於解決以前版
本中由於繫結變數窺探導致sql語句無法獲得最佳執行計畫的缺陷,即能夠對效率低下的游標(子游標)進行自動識別而選擇最佳的執行計畫。本
文詳細描述了自適應游標共享並給出示例。
有關繫結變數窺探請參考:oracle 繫結變數窺探
一、示例自適應游標共享
1、建立演示環境
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值(執行計畫可共享)
4、重新賦值後觀察游標共享情況
二、自適應游標共享的幾個相關檢視
1、v$sql_cs_statistics
用於監控自適應游標共享的相關統計資訊.下面的查詢中列出了每個子游標的peeking情況,以及執行次數,預處理行數,buffer_gets等
2、v$sql_cs_selectivity
顯示每個子游標的游標的選擇性範圍。下面的查詢中列出了謂詞,選擇性範圍,列上的選擇性的值
3、v$sql_cs_histogram
用於決定乙個查詢是否允許自適應游標共享,以直方圖形式儲存
三、總結
1、自適應游標共享在sql語句首次執行時(使用繫結變數),進行窺探,並記錄窺探結果,如果後續有相同的的sql語句執行,則對窺探結果
進行比較以判斷是否需要生成新的執行計畫。此即為繫結變數是否敏感。
2、繫結變數的可知性用於判斷當前的游標是否為可擴充套件性游標共享,當不可知時,則游標被廢棄。
3、自適應游標共享的實質是在oracle 10g以前的基礎上實現了多次繫結變數窺探,增加了獲取最佳執行計畫選擇的機率。
4、儘管使用自適應游標共享特性,但並不能保證每次執行sql語句一定按最佳計畫執行,本次演示中sql語句的第二次執行並非最佳執行計畫。
5、自適應游標共享也不能保證兩次執行相同sql語句一定按相同的執行計畫執行,因為自適應游標共享會不斷嘗試peeking。
四、延伸參考
oracle 繫結變數窺探
oracle自適應共享游標
繫結變數及其優缺點
父游標、子游標及共享游標
dbms_xplan之display_cursor函式的使用
dbms_xplan之display函式的使用
執行計畫中各字段各模組描述
網格自適應 Fluent網格自適應
1,前言 國慶剛過,馬上就要上班,上課了,祝福大家事業學業都有新的進步,新的前途。2,內容簡介 我們在平時做流體分析時,經常會遇到乙個問題,當畫好的網格匯入fluent計算時,看了分析結果,想讓某一部分我們關注的點更加細化一些,我們不得不重新去網格軟體裡調整網格。今天介紹的fluent自帶的網格自適...
網格自適應 網格自適應04 各向異性自適應
本文描述各向異性網格自適應方法應用。由於各向異性自適應 anisotropic adaption 僅適用於特定的網格型別,因此存在以下限制 利用按鈕 setting up domain adapt more anisotropic refinement.開啟anisotropic adaption設...
Iframe自適應高度和拖拽自適應
思路 1.在iframe所在的主頁面取iframe內部的高度 2.在iframe內部當初始化完之後取得自己高度並改變父iframe高度 法一 需要在iframe的平級,當頁面初始化的時候呼叫 the iframe height self adaption param the iframe id fu...