並行執行核心參數
| 參數 | 說明 | 範圍 | 預設值 |
| PARALLEL_MAX_SERVERS | 並行伺服器進程上限 | 0-256 | 由 CPU_COUNT、PARALLEL_AUTOMATIC_TUNING 決定 |
| PARALLEL_MIN_SERVERS | 啟動時預建立的並行伺服器數 | 0-PARALLEL_MAX_SERVERS | 0 |
| PARALLEL_THREADS_PER_CPU | 每 CPU 可處理的並行執行緒數,影響自適應演算法 | 非零值 | 通常 2 (視 OS) |
| PARALLEL_AUTOMATIC_TUNING | TRUE 時自動調整並行參數預設值 | TRUE/FALSE | FALSE |
| PARALLEL_ADAPTIVE_MULTI_USER | 多用戶環境自適應降低並行度 | TRUE/FALSE | 隨 PARALLEL_AUTOMATIC_TUNING |
| PARALLEL_MIN_PERCENT | 要求的最小並行度百分比,不足則報錯 | 0-100 | 0 (不啟用) |
| PARALLEL_EXECUTION_MESSAGE_SIZE | 並行訊息緩衝區大小,影響共用池/大池需求 | 2148+ | 2148 (FALSE) / 4096 (TRUE) |
| PARALLEL_BROADCAST_ENABLED | 小結果集廣播到大表叢集,改善 Hash/Merge Join | TRUE/FALSE | FALSE |
Session/Object 級並行度控制
1. 表級指定並行度
ALTER TABLE emp PARALLEL (DEGREE 4);
-- 查詢
SELECT DEGREE FROM USER_TABLES WHERE TABLE_NAME = 'EMP';
2. Hint 指定並行度
SELECT /*+ PARALLEL(emp, 4) */ COUNT(*) FROM emp;
3. 關閉並行
ALTER TABLE emp NOPARALLEL;
SELECT /*+ NO_PARALLEL(emp) */ COUNT(*) FROM emp;
實戰驗證流程
步驟 1:啟用自動調優(建議)
ALTER SYSTEM SET PARALLEL_AUTOMATIC_TUNING = TRUE SCOPE=SPFILE;
-- 需重啟生效
步驟 2:設定表並行屬性
ALTER TABLE large_table PARALLEL (DEGREE 8);
步驟 3:驗證執行計劃
EXPLAIN PLAN FOR
SELECT /*+ PARALLEL(8) */ COUNT(*) FROM large_table;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
-- 觀察 PX SEND / PX RECEIVE / PX BLOCK ITERATOR 等並行操作
步驟 4:監控並行執行狀態
-- 目前活躍的並行查詢
SELECT * FROM V$PX_SESSION;
-- 並行伺服器使用情況
SELECT * FROM V$PX_PROCESS_SYSSTAT;
-- 歷史並行執行統計
SELECT * FROM V$PQ_SESSTAT;
關鍵視圖對照
| 視圖 | 用途 |
| V$PX_SESSION | 目前並行查詢的 Session 與 Slave 關係 |
| V$PX_PROCESS | 並行 Slave 進程狀態 |
| V$PX_PROCESS_SYSSTAT | 並行伺服器分配/使用統計 |
| V$PQ_SESSTAT | Session 級並行執行統計 |
| V$PQ_TQSTAT | 並行查詢表佇列傳輸統計 |
| V$RSRC_CONSUMER_GROUP | 資源管理器下的並行資源分配 |
常見問題與對策
| 現象 | 可能原因 | 對策 |
| 並行度不如預期 | PARALLEL_MAX_SERVERS 不足、資源管理器限制 | 調大上限、檢查 Resource Manager Plan |
| 並行查詢比串行慢 | 小表、資料傾斜、I/O 瓶頸、協調開銷大 | 設定 PARALLEL_MIN_PERCENT、收集統計資訊、調整 DEGREE |
| ORA-12827: 並行伺服器不足 | 同時並行查詢過多、PARALLEL_MIN_PERCENT 設太高 | 降低 MIN_PERCENT、錯開排程、擴充 MAX_SERVERS |
| 共用池/大池不足 | PARALLEL_EXECUTION_MESSAGE_SIZE 過大、並行度高 | 調整 SGA、使用 Large Pool |
最佳實務建議
- 啟用 PARALLEL_AUTOMATIC_TUNING,讓 Oracle 自動管理預設值
- 大表設定 DEGREE = CPU_COUNT * 2 為起點,依實測調整
- 使用 Resource Manager 限制低優先度作業的並行度
- 避免在 OLTP 核心表啟用並行,適用於資料倉庫、報表、大量載入
- 定期檢視 V$PX_PROCESS_SYSSTAT,觀察 "Servers Busy" vs "Servers Idle" 比例
並行執行是大型資料倉庫查詢加速的核心武器。參數調整需以實測為準,切勿盲目調大 DEGREE。建立「參數配置 → 執行計劃驗證 → 運行監控 → 持續調優」的閉環流程,才能穩定發揮並行效能。
- 上一篇文章: Oracle CPU 效能調優實戰:監控指標、解析分析與優化策略
- 下一篇文章: Oracle 外部表實戰:讀取 Alert Log 進行自動化監控
Copyright ©
程式碼之家 All Rights Reserved