用Oracle進行過實際開發的應該對硬解析與軟解析並不陌生,Oracle中對這兩種不一樣解析的使用,將直接影響到整個系統的性能。那在項目中儘可能使用軟解析的緣由又是什麼呢?首先來一塊兒看一下這兩種解析的工做過程:數據結構
一個硬解析包括下面的步驟:oracle
在Oracle中軟解析和硬解析的區別是什麼?僅僅是上面用紅色標明的第一步。也就是說,軟解析不須要從新裝載到共享池(以及相關的內存分配)。 性能
硬解析比軟解析差不少,由於它牽涉到共享池中內存的分配和管理。硬解析須要把SQL語句加載到共享池中。一旦被加載,SQL必須徹底從新檢查語法和語義以及生成可執行目標。優化
Oracle中有一種叫作閂的鎖,用來實現對Oracle所用共享數據結構的串行化訪問,此處提到的共享池就是這樣一個例子。共享池是系統全局區的(System Global Area, SGA)中一個龐大的共享數據結構,Oracle正是在這裏存儲已解析、已編譯的SQL。修改這個共享結構的時候,因爲閂的存在,一次只容許一個進程訪問。因此,當系統中存在大量的硬解析時,每生成的一個新的SQL語句都須要加載到共享池裏面,也就是對這個共享結構進行了修改,此時每次只能有一個線程來對共享池進行訪問,這就致使等待時間變長,效率下降。若使用軟解析,只須要加載與解析一次,不會重複的進行大量SQl的編譯與解析,因此效率會大大增長。spa