1. 程式人生 > >Oracle 硬解析和軟體解析

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的時間要短。