| 參數 | 含義 | 超限錯誤 | 錯誤代碼 |
|---|---|---|---|
| SESSIONS | Instance 允許的最大並發 Session 數 (含背景進程) | 無法建立新 Session | ORA-00018: maximum number of sessions exceeded |
| PROCESSES | Instance 在 OS 層面允許的最大進程數 | 無法啟動新進程 | ORA-00020: maximum number of processes (%s) exceeded |
公式: SESSIONS = (預估最大並發用戶數 + 背景進程數) × 1.1 (10% 緩衝)
實例: 預估 100 個並發用戶,背景進程約 10 個:
SESSIONS = (100 + 10) × 1.1 = 121
超過此值新連線將報 ORA-00018。解決:ALTER SYSTEM SET SESSIONS = 後重啟。
同 SESSIONS 邏輯:PROCESSES = (並發用戶數 + 背景進程數) × 安全係數。通常設定略大於 SESSIONS (因背景進程不佔 Session 但佔 Process)。
計算公式變更:
PROCESSES = 背景進程數 + MAX_SHARED_SERVERS + MAX_DISPATCHERS
不再與用戶連線數 1:1 對應,由 Dispatcher 多工連線,Shared Server 多工處理。
Windows 下 Oracle 為單進程多執行緒架構,PROCESSES 實際限制的是 **執行緒數**,而非進程數。
PROCESSES ≥ SESSIONS + 10~20。-- 當前使用率
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% 緊急擴容。