您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么 理解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)注!
免責聲明:本站發(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)容。