PROCESSES 定義實例允許的最大作業系統用戶進程數(含背景進程、用戶進程),直接決定最大並發連接數上限。修改需重啟實例生效(靜態參數)。
-- 1. 以 SYSDBA 登錄
sqlplus / as sysdba
-- 2. 確認當前值
SHOW PARAMETER processes;
-- 3. 修改目標值 (示例 1000),寫入 SPFILE
ALTER SYSTEM SET processes=1000 SCOPE=SPFILE;
-- 4. 生成 PFILE 备份 (可選,便於離線檢查)
CREATE PFILE FROM SPFILE;
-- 5. 重啟實例使配置生效
SHUTDOWN IMMEDIATE;
STARTUP;
-- 6. 驗證新值
SHOW PARAMETER processes;
調大 PROCESSES 時,建議同步評估:
SESSIONS:默認推導為 1.1 * PROCESSES + 5,若應用連接池大,需顯式設大。TRANSACTIONS:默認 1.1 * SESSIONS。/etc/security/limits.conf 中 oracle soft/hard nproc、nofile 需同步放開,否則實例啟動會報 ORA-00020。SELECT sid, sql_text, cursor_type
FROM v$open_cursor
WHERE user_name = 'TRAFFIC';
SELECT sid, serial#, username, status, machine, program, logon_time, last_call_et
FROM v$session
WHERE type = 'USER'
ORDER BY logon_time;
-- 當前佔用率
SELECT (COUNT(*) * 100 / (SELECT value FROM v$parameter WHERE name = 'processes')) AS pct_used
FROM v$process;
-- 等待事件關聯
SELECT event, COUNT(*) FROM v$session_wait WHERE wait_time = 0 GROUP BY event ORDER BY 2 DESC;
| 誤區 | 後果 | 正確做法 |
|---|---|---|
| 僅改 PROCESSES 不改 OS limits | 實例啟動失敗或運行中無法建立新連接 | OS、DB 參數同步變更,重啟驗證 |
| 設過大 (如 5000) 卻無足夠 PGA/內存 | 進程啟動時 ORA-04030、交換分區抖動 | 按「峰值併發 * 1.2 + 背景進程」估算,配合 PGA_AGGREGATE_LIMIT 保護 |
| 忽略 SESSIONS 推導邏輯 | 連接數未達 PROCESSES 上限卻報 ORA-00018 | 顯式設定 SESSIONS = PROCESSES * 1.5 |
修改最大連接數是「參數調整 + OS 資源配套 + 重啟驗證 + 持續監控」的完整工程動作。建立定期巡檢機制,監控 v$resource_limit 中 processes/sessions 佔用率,超 70% 觸發擴容評估,方能保障服務平穩擴展。