Oracle中的硬解析與軟解析原理


     用Oracle進行過實際開發的應該對硬解析與軟解析並不陌生,Oracle中對這兩種不一樣解析的使用,將直接影響到整個系統的性能。那在項目中儘可能使用軟解析的緣由又是什麼呢?首先來一塊兒看一下這兩種解析的工做過程:數據結構

     一個硬解析包括下面的步驟:oracle

  1.      1. 加載到共享池中 - SQL源代碼被加載到內存中。
  2.      2. 語法解析 - Oracle檢查語法拼寫錯誤。
  3.      3. 語義解析 - Oracle驗證來自數據字典的全部表名和列名而且驗證你是否有權訪問這些數據。
  4.      4. 查詢轉換 - 若是容許(query_rewrite=true),oracle將把複雜的SQL轉換爲等價的簡單形式。
  5.      5. 優化 - 根據模式的統計信息建立執行計劃(在10g中或許會使用動態的樣本統計信息)。
  6.      6. 建立可執行文件 - Oracle建立一個服務於SQL查詢的、調用本地文件的可執行文件。

    

     在Oracle中軟解析和硬解析的區別是什麼?僅僅是上面用紅色標明的第一步。也就是說,軟解析不須要從新裝載到共享池(以及相關的內存分配)。    性能

      硬解析比軟解析差不少,由於它牽涉到共享池中內存的分配和管理。硬解析須要把SQL語句加載到共享池中。一旦被加載,SQL必須徹底從新檢查語法和語義以及生成可執行目標。優化

      Oracle中有一種叫作閂的鎖,用來實現對Oracle所用共享數據結構的串行化訪問,此處提到的共享池就是這樣一個例子。共享池是系統全局區的(System Global Area, SGA)中一個龐大的共享數據結構,Oracle正是在這裏存儲已解析、已編譯的SQL。修改這個共享結構的時候,因爲閂的存在,一次只容許一個進程訪問。因此,當系統中存在大量的硬解析時,每生成的一個新的SQL語句都須要加載到共享池裏面,也就是對這個共享結構進行了修改,此時每次只能有一個線程來對共享池進行訪問,這就致使等待時間變長,效率下降。若使用軟解析,只須要加載與解析一次,不會重複的進行大量SQl的編譯與解析,因此效率會大大增長。spa

相關文章
相關標籤/搜索