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

Oracle 記憶體參數調優實戰:透過 PFILE/SPFILE 降低 SGA 佔用

     編輯:Oracle 資料庫基礎

開發/測試環境資源有限,需縮減 Oracle SGA 佔用以騰出記憶體給作業系統或其他服務。本文提供標準流程:`CREATE PFILE FROM SPFILE` → 編輯參數 → `SHUTDOWN` → `CREATE SPFILE FROM PFILE` → `STARTUP`,並給出 2GB 實體記憶體環境下的具體參數參考值與驗證腳本。

標準調整流程 (需 SYSDBA)


-- 1. 以 SYSDBA 登入
SQLPLUS "/ AS SYSDBA"

-- 2. 從 SPFILE 建立可編輯的 PFILE (文字檔)
CREATE PFILE = 'D:/cj.ora' FROM SPFILE;

-- 3. 使用文字編輯器修改 D:/cj.ora 參數 (見下表)

-- 4. 關閉資料庫
SHUTDOWN IMMEDIATE;

-- 5. 從修改後的 PFILE 重建 SPFILE
CREATE SPFILE FROM PFILE = 'D:/cj2.ora';

-- 6. 啟動資料庫
STARTUP;

-- 7. 驗證
SHOW SGA;
SHOW PARAMETER SGA;

2GB 實體記憶體環境參數參考 (調整前 vs 調整後)

參數調整前 (預設/較大)調整後 (建議)說明
SGA_MAX_SIZE712M512MSGA 硬上限,預留 1.5GB 給 OS/PGA
SGA_TARGET (ASMM)(未設/同 MAX)480MSGA 動態目標,啟用 ASMM 自動平衡
DB_CACHE_SIZE350M256MBuffer Cache 最小保障 (ASMM 下為下限)
SHARED_POOL_SIZE250M128MShared Pool 最小保障
LARGE_POOL_SIZE8M8M共享伺服器/RMAN 需求小可維持
JAVA_POOL_SIZE(預設)16M若無 Java Stored Procedure 可設 0
STREAMS_POOL_SIZE(預設)0無 Streams/GG 可設 0
LOG_BUFFER(自動)(自動)通常無需手動設定
PGA_AGGREGATE_TARGET(預設)200MPGA 總量控制,防止排序/雜湊溢寫磁碟

關鍵參數設定原則

  • SGA_TARGET + PGA_AGGREGATE_TARGET < 實體記憶體 × 70%: 留足 OS 檔案系統緩存、網路緩衝、其他進程空間。
  • SGA_MAX_SIZE ≥ SGA_TARGET: 硬上限不小於動態目標。
  • 元件最小值 (_SIZE 參數): 在 ASMM 下作為下限保障,防止被壓縮過度。
  • 避免設定 MEMORY_TARGET (AMM): 開發機 `/dev/shm` 通常較小,AMM 易導致 ORA-00845 (MEMORY_TARGET not supported)。

驗證腳本


-- 1. 確認 SGA 總量
SHOW SGA;

-- 2. 確認各組件實際大小
SELECT component, current_size/1024/1024 AS mb
FROM   V$SGA_DYNAMIC_COMPONENTS
WHERE  current_size > 0
ORDER  BY current_size DESC;

-- 3. 確認參數生效
SHOW PARAMETER SGA;
SHOW PARAMETER PGA;

-- 4. 監控實際記憶體使用 (OS 層面)
-- Linux: pidstat -r -p  1
-- 或: cat /proc//status | grep VmRSS

常見問題與對策

問題原因解決
ORA-00845: MEMORY_TARGET not supported/dev/shm 空間不足或 AMM 不支援改用 ASMM (SGA_TARGET),取消 MEMORY_TARGET
STARTUP 掛住 / ORA-27102共享記憶體段衝突、巨大頁面設定錯誤檢查 /etc/sysctl.conf shmmax/shmall、HugePages 設定
調整後效能下降Buffer Cache/Shared Pool 過小導致物理讀/硬解析激增逐步微調 (每次 10-20%),觀察 V$SYSSTAT 命中率、V$LIBRARYCACHE RELOADS
PFILE 路徑錯誤Windows 路徑分隔符、權限不足使用正斜線 `D:/cj.ora` 或雙反斜線 `D:\\cj.ora`,確保 Oracle 服務帳號可讀寫

自動化調整腳本 (Shell)


#!/bin/bash
# reduce_sga.sh - 開發環境一鍵縮減 SGA
ORACLE_SID=ORCL
PFILE_DIR=/tmp
TARGET_SGA_MB=512

sqlplus -s "/ as sysdba" <

掌握 PFILE/SPFILE 雙轉換流程、ASMM 核心參數關係、OS 層面記憶體驗證,即能在資源受限環境安全、可控地縮減 Oracle 記憶體佔用。

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