一、記憶體結構:SGA 核心組件與查詢
-- 查看 SGA 總大小
SELECT * FROM v$sga;
-- 詳細組件大小
SELECT component, current_size/1024/1024 AS size_mb FROM v$sga_dynamic_components;
| 組件 | 功能 | 關鍵參數 |
| Shared Pool | SQL/PLAN 快取、資料字典快取、Result Cache | SHARED_POOL_SIZE, RESULT_CACHE_MAX_SIZE |
| Database Buffer Cache | 資料塊快取 (Default/Keep/Recycle Pool) | DB_CACHE_SIZE, DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE |
| Redo Log Buffer | Redo 記錄暫存,Commit 前必寫 | LOG_BUFFER |
| Large Pool | RMAN/共享伺服器/平行查詢大記憶體分配 | LARGE_POOL_SIZE |
| Java Pool | 資料庫內 JVM 類別/會話狀態 | JAVA_POOL_SIZE |
| Streams Pool | Streams/GoldenGate 佇列 | STREAMS_POOL_SIZE |
二、背景進程:核心 8 大進程職責
| 進程 | 關鍵觸發條件 | 備註 |
| DBWR | LRU 掃描發現髒塊 / Checkpoint / Tablespace Offline / Truncate | 多進程 DBWn 提升寫入並行 |
| LGWR | Commit / Redo Log Buffer 1/3 滿 / 1MB 積累 / 3 秒 Timeout | Group Commit 優化高併發 |
| SMON | 啟動時實例恢復 / 臨時段清理 / 空間合併 | |
| PMON | 使用者進程異常終止 / 鎖清理 / Listener 動態註冊 | |
| CKPT | Checkpoint 發生時更新控制檔/資料檔表頭 | 大量資料檔時啟用分攤 LGWR |
| ARCn | Redo Log Group 切換 (歸檔模式) | 多進程支援多目的地 |
| Server Process | 處理使用者 SQL、PL/SQL 執行 | 專用/共享伺服器模式 |
| User Process | 客戶端發送 SQL、接收結果 | 非資料庫進程 |
三、物理檔案集合與查詢視圖
| 檔案類型 | 查詢視圖 | 典型檔名範例 |
| 控制檔 | V$CONTROLFILE | control01.ctl, control02.ctl |
| 資料檔 | V$DATAFILE | system_01.dbf, sysaux_01.dbf, undotbs_01.dbf, temp_01.dbf, users_01.dbf |
| 線上重做日志 | V$LOGFILE, V$LOG | redo01.log, redo02.log, redo03.log |
| 歸檔日志 | V$ARCHIVED_LOG | ARC00001_0812345678_0001.log |
| 參數檔 | V$PARAMETER / SPFILE | spfile.ora, init.ora |
| 口令檔 | $ORACLE_HOME/dbs/orapw | orapworcl |
| 警示/追蹤日志 | ADR Base (DIAGNOSTIC_DEST) | alert_.log, _ora_.trc |
四、常用診斷查詢
-- 控制檔
SELECT * FROM v$controlfile;
-- 資料檔
SELECT * FROM v$datafile;
-- 重做日志
SELECT * FROM v$logfile;
-- 歸檔模式狀態
ARCHIVE LOG LIST;
結語
Instance = SGA + 背景進程。理解記憶體組件與進程職責的對應關係 (如 LGWR ↔ Redo Log Buffer ↔ Online Redo Log),是效能調校與故障診斷的基石。