Oracle 硬解析和軟件解析

硬解析:

Oracle在執行目標sql時,在庫緩存中找不到可以重用的解析樹和執行計劃,而不得不從開始解析目標sql並生成相應的Parent Cursor 和Child Cursor的過程。

Oracle 在庫緩存中找不到Parent Cursor和Child Cursor時都會執行硬解析過程。

硬解析的危害性有如下幾個方面:

1、 硬解析可能會導致Shared Pool Latch的爭用。在Shared Pool中分配內存需要持有Shared Pool Latch,如果併發的硬解析的數量很多的化,可能會導致Shared Pool Latch的爭用,這會影響到系統的性能和可擴展性。

2、 硬解析可能會導致庫緩存相關Latch 和Mutex的爭用。

無論哪種類型的硬解析都會掃描相關Hash Bucket中的庫緩存對象句柄鏈,而掃描庫緩存對象句柄鏈表,需要持有Library Cache Latch,一旦發生大量的Library Cache Latch的爭用,也會影響到系統和性能和可擴展性。

軟解析:

軟解析是指Oracle在執行目標sql時,在Library Cache中找到了匹配的Parent Cursor和child Cursor,並將存儲在Child Cursor中的解析樹和執行計劃直接拿過來重用,而無需從頭開始解析的過程。

軟解析的優勢:

1: 軟解析不會導致Shared Pool Latch的爭用,因爲這個過程不會在Shared Pool 進行內存分配

2 軟解析雖然也會導致庫緩存相關的Latch的爭用,但是軟解析持有庫緩存相關的Latch的次數較少,而且軟解析對某些Latch(Library Cache Latch)的持有時間回比硬解析持有的時間短。硬解析會持有Library Cache Latch,並且在不釋放Lihrary Cache Latch的情況下,持有shared Pool Latch,以從Shared Pool中分配內存,內存分配完成後,就會釋放Shared Pool Latch,然後在釋放 Library Cache Latch。 軟解析不會持有Shared Pool Latch,因此持有Library Cache Latch的時間要短。

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