溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么 理解ORACLE的游標共享

發(fā)布時間:2021-11-08 14:23:22 來源:億速云 閱讀:160 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章主要講解了“怎么 理解ORACLE的游標共享”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么 理解ORACLE的游標共享”吧!

游標共享(cursor sharing)指的是share cursor的共享

做到游標共享很簡單,使用綁定變量就可以實現(xiàn),但是會遇到下面兩個問題

1、開發(fā)人員在開發(fā)時,未使用綁定變量,這是如果要用綁定變量,就會大量更改sql.

2、使用了綁定變量,但是由于綁定變量窺探的影響,會使某些解析樹和執(zhí)行計劃不合時宜

針對上面兩個問題,分別用兩種游標共享來解決

1、常規(guī)游標共享 ,解決問題1

通過參數(shù)cursor_sharing啟用系統(tǒng)綁定變量

exact  不啟用綁定變量

similar 只對安全的謂語條件啟用,所謂的安全,就是執(zhí)行計劃不會隨著這個值的變化而發(fā)生變化,比如主鍵列的等值查詢,而范圍類的查詢則是不安全的,比如大于,小于,like ,這是一個過時的值,任何時候都不要設(shè)置為這個值

force 啟用綁定變量,要在不改代碼的情況下,使那些where 字句或者values子句(insert) 共享相同的執(zhí)行計劃和解析,可以用這個值。

2、自適應游標共享

11g中引入了自適應游標共享

bind sensitive 指某個含有綁定變量的目標SQL執(zhí)行計劃可能隨著綁定變量輸入值的變化而變化。當滿足下列三個條件時,目標SQL對應的child cursor 會被標記為bind sensitive .

1)啟用綁定變量窺探

2)該SQL使用了綁定變量

3)該SQL是不安全的謂語條件(比如范圍查詢,目標列有直方圖統(tǒng)計信息的等值查詢)

bind aware 確定含有綁定變量的目標SQL執(zhí)行計劃會隨著綁定變量輸入值的變化而變化,滿足下列兩個條件,目標SQL對應的child cursor 會被標記為bind aware

1)已被標記為bind sensitive

2)該SQL接下來的兩次執(zhí)行,對應的runtime統(tǒng)計信息跟硬解析時的runtime統(tǒng)計信息相比差異較大。

v$sql中的三列:is_bind_sensitive   is_bind_aware  is_shareable

自適應游標共享相關(guān)的兩個視圖:v$sql_cs_statistics   v$sql_cs_selectivity

v$sql_cs_statistics顯示指定child_cursor 的runtime 統(tǒng)計信息

v$sql_cs_selectivity 顯示指定的,已被標記為bind_aware的child_cursor中存儲的含綁定變量的謂語條件對應的可選擇率范圍。

自適應游標的整體執(zhí)行過程:

1、sql第一次執(zhí)行,硬解析,然后根據(jù)一系列條件(有沒有使用綁定變量,cursor_sharing的值,綁定變量列有沒有直方圖,等值查詢還是范圍查詢等)來判斷是否將child_cursor標記為bind_sensitive,如果已標記,會把執(zhí)行該SQL的runtime統(tǒng)計信息額外存儲在child cursor中

2、第二次執(zhí)行該SQL,會用軟解析,并重用之前的解析樹和執(zhí)行計劃

3、第三次執(zhí)行,如果之前child_cursor已經(jīng)被標記為bind_sensitive,而且第二次,第三次執(zhí)行該sql的runtime統(tǒng)計信息和硬解析時的runtime統(tǒng)計信息相差過大,則會重新硬解析該SQL,同時生成一個新的child cursor ,并把該child cursor標記為bind_aware。

4、對于標記為bind aware的sql ,再一次執(zhí)行時,會根據(jù)謂語條件中綁定變量的可選擇率來選擇硬解析還是軟解析。判斷條件是,該選擇率位于該SQL硬解析時同名謂語條件在v$sql_cs_statistics中的選擇率范圍內(nèi),則用軟解析,反之則用硬解析。

感謝各位的閱讀,以上就是“怎么 理解ORACLE的游標共享”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對怎么 理解ORACLE的游標共享這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI