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

Oracle 限制參數深度解析(一):SESSIONS 與 PROCESSES 設定藝術

     編輯:Oracle 資料庫基礎

核心參數對比

參數含義超限錯誤錯誤代碼
SESSIONSInstance 允許的最大並發 Session 數 (含背景進程)無法建立新 SessionORA-00018: maximum number of sessions exceeded
PROCESSESInstance 在 OS 層面允許的最大進程數無法啟動新進程ORA-00020: maximum number of processes (%s) exceeded

SESSIONS 設定公式與實例

公式: SESSIONS = (預估最大並發用戶數 + 背景進程數) × 1.1 (10% 緩衝)

實例: 預估 100 個並發用戶,背景進程約 10 個:

SESSIONS = (100 + 10) × 1.1 = 121

超過此值新連線將報 ORA-00018。解決:ALTER SYSTEM SET SESSIONS = SCOPE = SPFILE 後重啟。

PROCESSES 設定邏輯

專用伺服器模式

同 SESSIONS 邏輯:PROCESSES = (並發用戶數 + 背景進程數) × 安全係數。通常設定略大於 SESSIONS (因背景進程不佔 Session 但佔 Process)。

共用伺服器模式 (MTS/Shared Server)

計算公式變更:

PROCESSES = 背景進程數 + MAX_SHARED_SERVERS + MAX_DISPATCHERS

不再與用戶連線數 1:1 對應,由 Dispatcher 多工連線,Shared Server 多工處理。

Windows 平台特殊性

Windows 下 Oracle 為單進程多執行緒架構,PROCESSES 實際限制的是 **執行緒數**,而非進程數。

常見誤區與最佳實踐

  1. 只改 SESSIONS 不改 PROCESSES:若 PROCESSES 較小,先觸發 ORA-00020。兩者需協同設定,建議 PROCESSES ≥ SESSIONS + 10~20。
  2. 設定過大:過大的值會預分配 SGA 中的 Session/Process 狀態物件,浪費記憶體。
  3. 忽略背景進程:Data Guard、RAC、Job Queue、Parallel Query 等會增加背景進程,預留 20~30 個較保險。
  4. 動態調整:兩者皆為靜態參數,**修改需重啟 Instance**。規劃時須考慮未來增長。

監控與告警

-- 當前使用率
SELECT 
  'SESSIONS' AS resource,
  (SELECT COUNT(*) FROM V$SESSION) AS current_used,
  (SELECT VALUE FROM V$PARAMETER WHERE NAME = 'sessions') AS limit_val,
  ROUND((SELECT COUNT(*) FROM V$SESSION) / (SELECT VALUE FROM V$PARAMETER WHERE NAME = 'sessions') * 100, 2) AS pct_used
FROM DUAL
UNION ALL
SELECT 
  'PROCESSES',
  (SELECT COUNT(*) FROM V$PROCESS),
  (SELECT VALUE FROM V$PARAMETER WHERE NAME = 'processes'),
  ROUND((SELECT COUNT(*) FROM V$PROCESS) / (SELECT VALUE FROM V$PARAMETER WHERE NAME = 'processes') * 100, 2)
FROM DUAL;

建議:使用率超過 80% 告警,90% 緊急擴容。

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