溫故而知新之Oracle 父子遊標

來源:互聯網
上載者:User

標籤:父子遊標

當兩個sql文本相同,而其他環境不同,這兩個遊標不能共用執行計畫。它們都有各自的執行計畫存在緩衝庫中。這兩個遊標就是子遊標,oracle還會建立一個父遊標,父遊標沒有執行計畫,只是文本相同但執行計畫不同的所有遊標的代表。

其實在庫緩衝中,即使一個遊標沒有和它文本相同的其它遊標,oracle也會為每個遊標建立父遊標。也就是說只要你執行SQL語句,oracle都會在庫緩衝中儲存一父一子兩個遊標。如果你執行了文本相同但環境不同因此不能共用執行計畫的SQL語句,那麼一個父遊標就對應多個子遊標。

父遊標沒有執行計畫,只有一些資訊管理性資料,oracle添加它的目的就是為了管理文本相同的遊標。

V$sqlarea: 保留SQL語句的父遊標資訊,可以通過SQL_ID標識,其中version_count列表示子遊標的數量

V$SQL: 保留SQL語句的子遊標資訊,可以通過SQL_ID和child_number標識

注意v$sql中的子遊標的編號是由0開始的

V$SQL_shared_cursor: 語句產生子遊標的原因

這裡再解釋下可以更清楚理解概念:

scott 使用者下執行以下SQL:

select * from emp;

sh 使用者下執行以下SQL:

select * from emp;

以上兩個SQL一模一樣,而他們執行的使用者不同,甚至這兩個EMP都屬於不同schema,那麼此時的在v$sqlarea他們同用一個父遊標,在這個父遊標下面查詢v$sql有兩個子遊標。

關於遊標的結構與原理請參考:基於Oracle的SQL最佳化

溫故而知新之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.