Oracle: 變數綁定

來源:互聯網
上載者:User

Parent-Child cursor (父子遊標)

父遊標:只要SQL語句文本相同,它們就對應 同一個parent cursor。

子遊標:在某些情況下,雖然SQL語句的文本相同,但是因為其它 因素不同(這些因素可以在視圖V$SQL_SHARED_CURSOR中查看),導致產生不同的child cursor。(重建child cursor,也就意味著一次硬解析)

cursor_sharing

對 於是否使用綁定變數這個問題,最好是交給應用程式決定,在資料庫層面是很難正確判斷。 (這也是為什麼cursor_sharing參數預設值為exact)

但是,有些時候,由於應用程式沒 有正確使用綁定變數,導致資料庫效能問題,又因為此時系統已上線,要改應用代碼有很多 的阻力(大多都是人為的因素)。為此,Oracle提供了應急(事後補救)方案,可以在資料 庫層級強制使用綁定變數。

當cursor_sharing=force時,對於只有謂詞條件不一樣的SQL 陳述式,Oracle統統都認為是一樣的。但是這樣會有一個問題,就是可能後續的執行計畫不是 最優。為瞭解決這個問題,可以設定cursor_sharing=similar,這樣如果謂詞條件的變化可 能產生不同的執行計畫,Oracle都會進行硬解析(產生child cursor)。

但是,設定 cursor_sharing=similar要非常小心,因為有很多bug,需要經過充分的測試才能在生產庫上 修改。

Bind Peeking (變數窺視)

從Oracle9i開始,Oracle在第一次解析SQL (hard parse)時,如果SQL上有變數綁定,會查看這個變數的值,以便於更準確的指定執行計 劃;但在後續的分析中(soft parse),將不會理會這個變數的值。

適用情境

執行計畫幾乎不改變(oltp)

大量的並發

大量的除謂詞外幾乎相同的SQL。

不適用情境

執行計畫會隨變數值的變化而改變。

少量的SQL (OLAP).

ACS (Adaptive Cursor Sharing)

Oracle11g用於解決變數綁定帶來的 負面影響,通過不斷觀察bind的值,來決定新的SQL是否重用之前的執行計畫,解決綁定變數 導致後續執行計畫不變的問題。

缺點

更多的硬分析

產生更多的子遊標,需 要更多的記憶體。

消耗更多的CPU

綁定變數的適用情境

適用於OLTP

用 戶並發很高

表中有主鍵

操作的資料少

執行計畫穩定

SQL的重複率高

不適 用於OLAP

執行計畫多變

並發使用者少

SQL解析對系統效能影響小

返回欄目頁:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.