必须用gv$active_session_history而非v$active_session_history——rac中px进程跨节点分布,单实例视图会遗漏90%并行倾斜;核心看time_waited(>5秒为硬信号),非sample_count;需按inst_id分组比对,并回溯sql_id关联表/索引degree属性。

直接查 gv$active_session_history,别用 v$active_session_history —— RAC 环境下单实例视图根本看不到跨节点的 PX 进程,90% 的并行倾斜问题会因此漏掉。
查不到 PX 等待事件?先确认是否用了 gv$active_session_history
在 RAC 中,px coordinator 和 p000~p009 这类 PX slave 往往分散在不同节点。只查 v$active_session_history 就像只看一台监控摄像头却想判断整个园区人流——关键等待如 PX Deq: Execution Message、parallel query dequeue wait 根本不会出现。
- 必须用
gv$active_session_history,且显式按inst_id分组比对 - 执行这个语句快速定位跨节点分布异常:
SELECT inst_id, sql_id, event, COUNT(*) cnt FROM gv$active_session_history WHERE sample_time > SYSDATE - 1/1440 AND (event LIKE 'PX %' OR event LIKE 'parallel %') GROUP BY inst_id, sql_id, event ORDER BY cnt DESC;
- 若同一
sql_id在多个inst_id上都有高cnt,但MAX(time_waited)差异极大(比如节点 2 是 800ms、节点 1 是 5ms),就是典型的工作分配不均
判断并行倾斜的核心指标是 time_waited,不是 sample_count
COUNT(*) 高只代表“被采到的次数多”,不等于“真卡了那么久”。ASH 每秒采样一次,真正暴露长尾延迟的是 time_waited(单位:微秒),它来自底层等待事件的精确计时。
- 用这个查询抓最耗时的并行等待样本:
SELECT sql_id, event, ROUND(AVG(time_waited)/1000, 2) avg_ms, MAX(time_waited)/1000 max_ms FROM v$active_session_history WHERE event IN ('PX Deq: Execution Message', 'PX Deq: Table Q Normal', 'PX qref latch') AND sample_time > SYSDATE - 1/24 GROUP BY sql_id, event HAVING MAX(time_waited) > 5000000 ORDER BY max_ms DESC; -
MAX(time_waited) > 5000000(即 >5 秒)是硬信号:至少有一个 PX slave 卡住,拖慢整个并行组 - 若
AVG(time_waited)很低但MAX极高,基本可断定是数据分布倾斜或分区裁剪失效,导致某个 slave 扫描远超其他 slave
定位并行来源:从 SQL_ID 回溯到表/索引 degree 属性
os thread startup 等待事件本身不带 SQL_ID,但一定和某条高并发并行操作强相关。得靠关联反推:
- 先用
SQL_ID关联gv$active_session_history,过滤event = 'os thread startup',拿到高频出现的SQL_ID - 查该
SQL_ID的执行计划:SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('56h2h7wxpnntt', NULL, 'ALLSTATS LAST'));确认是否含PX COORDINATOR或PX SEND等并行操作符 - 重点检查该 SQL 涉及的表和索引:
SELECT owner, index_name, degree FROM dba_indexes WHERE table_name IN (/*对应表名*/);
很多问题是索引残留了degree > 1,查询时 Oracle 自动启用并行
真正容易被忽略的点是:Solaris 系统下同等负载更容易触发 os thread startup,不能简单套用 Linux 经验;另外,time_waited 必须除以 1000 才是毫秒,直接看原始值会误判数量级。











