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

Oracle 實例進程結構與內存架構圖解:從單進程到多進程、背景進程全景圖

     編輯:Oracle 資料庫基礎

一、進程架構演進

模式描述適用場景
單進程 (單用戶)單一進程執行所有 Oracle 代碼 + 用戶應用,無獨立進程隔離MS-DOS 等單任務 OS、嵌入式輕量部署
多進程 (多用戶)多進程並發執行,每連接用戶對應專用進程,背景進程分工協作所有生產級 Unix/Linux/Windows 部署

二、多進程架構三大角色

1. 用戶進程

運行用戶應用 (SQL*Plus、Pro*C、JDBC 客戶端等),發起請求。

2. 服務器進程

處理用戶進程請求:

  • SQL 解析、優化、執行;
  • 從數據文件讀塊至 SGA 共享緩存;
  • 返回結果集。

連接模式:

  • 專用服務器:用戶進程 1:1 服務器進程,預設模式;
  • 共享服務器 (MTS):調度進程 (Dnnn) 多路複用,少量共享服務器 (Snnn) 服務大量用戶,節省進程資源。

3. 背景進程 (核心引擎)

實例啟動時自動創建,各司其職:

進程全稱核心職責關鍵特徵
DBWnDatabase Writer將髒塊從緩存寫回數據文件多進程 (DBW0-DBW9)、LRU/檢查點觸發、異步 I/O
LGWRLog Writer將 Redo 緩存寫入線上日誌文件單進程、順序寫、COMMIT 強制刷盤、組提交優化
CKPTCheckpoint更新數據文件頭/控制文件檢查點 SCN加速實例恢復、觸發 DBWn 寫入
SMONSystem Monitor實例恢復、臨時段清理、合併連續空閒區啟動時單次恢復、定期喚醒維護
PMONProcess Monitor清理失敗進程資源、釋放鎖、重註冊服務守護進程、秒級輪詢
ARCnArchiver歸檔填滿的線上日誌組歸檔模式必備、多進程並行歸檔
RECORecoverer解決分布式事務掛起 (雙階段提交失敗)定期喚醒嘗試提交/回滾
LCKnLock (RAC)實例間全局鎖管理RAC 環境必備、多進程
DnnnDispatcher共享服務器連接多路複用MTS 架構核心
SnnnShared Server共享服務器進程MTS 架構核心

三、內存結構 (SGA + PGA)

SGA (System Global Area) — 共享內存

  • 共享池:Library Cache (SQL/PLSQL 解析樹、執行計劃)、Data Dictionary Cache、Result Cache;
  • 數據庫緩存:數據塊 (默認/Keep/Recycle 池)、換入/換出 LRU 管理;
  • Redo Log Buffer:重做記錄環形緩存,LGWR 批量刷盤;
  • 大池:並行查詢、RMAN、共享服務器 UGA;
  • Java 池 / Streams 池:組件專用。

PGA (Program Global Area) — 專用內存

  • 排序區、雜湊區、位圖合併區、會話游標狀態;
  • WORKAREA_SIZE_POLICY = AUTO + PGA_AGGREGATE_TARGET 自動管理 (9i+);
  • 12c+ PGA_AGGREGATE_LIMIT 防止失控。

四、關鍵交互流程:SQL 執行全景

  1. 用戶進程發送 SQL → 服務器進程接收;
  2. 共享池檢查游標緩存 → 未命中 → 硬解析 (語法/語義/優化/行源生成);
  3. 優化器訪問數據字典緩存 → 生成計劃 → 存入 Library Cache;
  4. 執行引擎按計劃訪問緩存/磁盤 → 邏輯讀/物理讀;
  5. 修改產生 Redo → Redo Log Buffer → LGWR 刷盤 (COMMIT);
  6. 髒塊標記 → DBWn 異步寫回數據文件;
  7. 結果集返回用戶進程 → 客戶端。

五、監控與診斷視圖

-- 進程狀態
SELECT * FROM V$PROCESS;
SELECT * FROM V$SESSION WHERE PADDR = (SELECT ADDR FROM V$PROCESS WHERE SPID = &os_pid);

-- 背景進程
SELECT NAME, DESCRIPTION FROM V$BGPROCESS WHERE PADDR != '00';

-- 內存分配
SELECT * FROM V$SGA;
SELECT * FROM V$SGASTAT WHERE POOL = 'shared pool' ORDER BY BYTES DESC;
SELECT * FROM V$PGASTAT;

掌握進程/內存架構全景,是從「SQL 調優」進階到「實例級性能工程」、「故障根因分析」、「容量規劃」的必經之路。

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