Oracle 庫緩存 和shared Cursor (下)

Shared Cursor是Oracle庫緩存對象中的一種。

是指緩存在庫緩存裏的sql語句和匿名sql語句所對應的庫緩存對象。
Shared Cursor 會存儲目標sql的sql執行文本、解析樹、該sql所涉及的對象定義、該sql所使用的綁定變量的類型和長度、以及該sql的執行計劃。

Shared Cursor分爲partent cursor 和child cursor。
它們的區別在於:目標sql的sql文本會存儲在Parent Cursor 所對應的庫緩存對象句柄的屬性Name中。 sql的解析樹和執行計劃存儲在child Cusor所對應的庫緩存對象句柄的Heap 6中, 同時Oracle會在該sql所對應的Partent Cursor的heap 0 的child table中,存儲從屬於該Parent Cursor的所有Child Cursor的庫緩存對象句柄地址。

在Oracle數據庫裏任意一條sql都會同時對應兩個shared Cursor : parent cursor 和child cursor。

一個Partent Cursor可能會有多個child Cursor,因爲一個sql可能會有多個執行計劃。

Oracle 在解析目標sql時去庫緩存中查找匹配shared Cursor的過程的步驟如下順序:

1:根據目標sql的哈希值去庫緩存中找匹配的hash Bucket。
2:然後在hash bucket的 庫緩存對象句柄鏈表中查找匹配的Partent Cursor。
3如果找到了Parent Cursor ,接下來就在 child table中查找匹配的child Cursor.
4 如果找不到 Parent Cursor,則意味着沒有共享的解析樹和執行計劃,需要重新開始解析目標sql,新生成一個Parent Cursor 和child 和Cursor。

5如果在第三步沒有找到child Cursor,也要重新解析目標,生成一個child cursor,掛在對應Parent Cursor上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章