首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

深入解析 Oracle Shared Pool 架構與 SQL 解析機制

     編輯:Oracle 資料庫基礎

Oracle Shared Pool 核心概念

Oracle Shared Pool 是系統全域區(SGA)的關鍵組件,主要負責緩存 SQL 執行計劃、PL/SQL 程式碼、資料字典資訊等可共享的記憶體結構。理解其運作機制對於資料庫效能調校至關重要。

用戶連接與服務器進程模式

專用服務器模式

在專用服務器架構下,監聽進程接收用戶請求後有兩種處理方式:

  • HAND-OFF 連接(轉換連接):監聽進程生成新的專用服務器進程,將控制資訊傳遞給新進程,由新進程直接與用戶通訊。此模式需要作業系統支援進程繼承功能,Windows 平台需設定 USE_SHARED_SOCKET 登錄值。
  • 重定向連接:服務器進程選擇一個 TCP/IP 端口,將端口資訊回傳給監聽進程,再由監聽轉交給用戶進程,用戶直接連接該端口。

共享服務器模式

僅支援重定向連接。監聽進程生成調度進程,多個用戶請求排隊於有限的調度進程,再由共享服務器進程從統一請求隊列取出處理。處理完成後,結果放入對應調度進程的響應隊列返回給用戶。可透過 MAX_DISPATCHERS 和 SHARED_SERVERS 參數控制調度與共享服務器進程數量。

SQL 語句解析與執行流程

當用戶提交 SQL 語句(如 UPDATE TABLEA SET SALARY=SALARY*2),服務器進程執行以下步驟:

  1. 語法檢查:驗證 SQL 語法正確性
  2. 語義檢查:對照資料字典檢查物件存在性、用戶權限等
  3. 檢查失敗返回 ORA-錯誤碼,不區分語法或語義錯誤
  4. 通過後,將語句轉換為 ASCII 碼,經 Hash 函數產生 Hash 值
  5. 在 Shared Pool 的 Library Cache 中查找相同 Hash 值:
    • 軟解析:找到匹配,直接使用已緩存的解析樹與執行計劃
    • 硬解析:未找到,需進行優化(生成執行計劃)並產生編譯代碼
  6. Library Cache 關鍵指標解讀

    透過 V$LIBRARYCACHE 監控 Shared Pool 健康度:

    • Pins (Execution):SQL 實際執行次數,不含語法/語義檢查失敗的語句
    • Reloads (Parse):未找到相同 Hash Value 的次數,即硬解析次數
    • Invalidations (Parse):因物件變更導致緩存失效而必須重新硬解析的次數。DDL 操作會立即使相關執行計劃失效,V$SQL 中的 PLAN_HASH_VALUE 立即歸零,再次執行時重新計算

    鎖存器與並發控制

    服務器進程透過 Shared Pool 鎖存器申請緩存空間,被鎖定的 PL/SQL 區塊不可被覆蓋。SQL 解析階段使用 Library Cache 鎖存器;讀取資料字典時也需 Library Cache 鎖存器保護字典緩存區域。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved