Oracle 高 Version counts 問題說明

來源:互聯網
上載者:User

一. version count 說明

MOS上有文檔說明此問題,參考:[ID296377.1]

Oracle裡的所有SQL 陳述式都是implicitly sharable的。 當使用者提交了一個SQL語句,RDBMS 會對這個SQL 陳述式進行hash 運算,然後產生一個hash 值, 在拿這個hash 值與shared pool 裡已經存在的SQL 進行hash 值比較,如果相同,就重用之前SQL 的cursor,如果沒有,就需要進行硬解析。

在硬解析時,Oracle 至少會產生一個parent cursor 和 child cursor, parent cursor 用來儲存hash value。 child cursor 用來儲存SQL 陳述式的metadata。 parent cursor和child cursor都是shared cursor,它們都是以library cache object handle的方式存在library cache裡。

注意:

parentcursor和child cursor都是library cache object,它們的結構是一摸一樣的.  這個可以通過dump library cache 來確認。

看下library cache 的一個管理結構圖,這幾張圖是從DSI 裡找到的。

 

Oracle通過Hash buckets來存放相關的對象,如cursor,那麼Oracle會把cursor 放到某個具體的buckets裡,由Oracle自己的演算法來操作。 在每個bucket裡面,會有很多的object,Oracle 通過list 的方式將每個bucket裡的對象串連起來。

每個Hash bucket 指向一個object Handle,handle 又指向其他的handle,每個Handle 又指向對應的Library Cache Object。 如所示。

 

 

 

 

LibraryCache Object是由一些獨立的heap所組成, Library cache handle指向Library cache Object,其實handle是指向第一個heap,這個heap 我們就稱之為heap 0。Heap 0記錄了指向其他heap的指標資訊。

heap0 代表的是parentcursor,它儲存的是sql 語句的hash value,同時heap 0 的child table裡儲存所有child cursor 的Data Heap地址。 在每個Child cursor  對應的handle 的Heap 0中的Data Blocks指向的heap 6儲存了SQL 對應的執行計畫。

當SQL 陳述式第一次執行時,在硬解析時,會建立parent cursor 和child cursor。 這2個是必須的。這2個過程是比較費資源的。也是硬解析裡主要做的事。 當再次執行這個SQL時,Oracle 會先對SQL 陳述式進行hash 運算,產生一個hash 值,然後用這個HASH 值到buckets裡去尋找,hash value 存放在parent cursor裡。 如果找到了,就去檢查child cursor。 如果可以重用這個child cursor,那麼就直接調用cursor裡的執行計畫。 如果不可重用,就會建立一個新的child cursor。 這個child cursor 的個數,就是version count。 不同parent cursor 對應的child cursor 越多,version count 就越高。

可以通過v$sqlarea 和 v$sql 視圖來查新相關資訊,v$sqlarea是父遊標相關資訊視圖,v$sql是子遊標的。

如:

select sql_id,version_countfromv$sqlarea  order by 2 desc ;

select  address,child_address,sql_textfrom v$sqlwheresql_id='70th7d08hqjf7';

v$sql中通過child_number,hash_value,address來確定一個子遊標,而v$sqlarea通過address和hash_value就可以確定一個父遊標;而從10g過後,通過sql_id就能確定一個遊標。 

  • 1
  • 2
  • 3
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.