应直接查询v$active_session_history(ash)定位并行ddl瓶颈,因其每秒采样可捕获px进程阻塞、i/o争用及热点对象访问等瞬时状态,而awr报告因sql_id归类失真、耗时统计笼统且缺乏进程级细节,无法准确反映并行执行流。

直接看 V$ACTIVE_SESSION_HISTORY 里的并行会话行为,别等 AWR 报告生成——ASH 每秒采样,能捕获 DDL 执行中瞬时的资源争用、PX 进程阻塞和热点对象访问,这是定位并行 DDL 瓶颈最灵敏的窗口。
为什么不能只看 AWR 报告里的 SQL Statistics
AWR 中的 SQL ordered by Elapsed Time 对并行 DDL 失效:DDL 语句(如 ALTER TABLE ... MOVE PARTITION)在 SQL_ID 层面可能不显式出现,或被归入系统内部递归 SQL;即使出现,其 Elapsed Time 是总耗时,无法反映 PX 进程是否空转、是否卡在 I/O 或锁上。ASH 则记录每个 PX slave 的每秒状态,真实还原执行流。
查并行 DDL 的关键 ASH 字段组合
执行以下查询,聚焦 DDL 操作期间的活跃会话:
SELECT sample_time,
session_id,
sql_id,
sql_opcode,
event,
p1text, p1,
qcsid, -- coordinator session ID
qc_session_serial#
FROM v$active_session_history
WHERE sample_time BETWEEN TO_DATE('2026-09-30 14:20', 'YYYY-MM-DD HH24:MI')
AND TO_DATE('2026-09-30 14:25', 'YYYY-MM-DD HH24:MI')
AND (sql_opcode IN (6, 7, 9, 11) -- DDL opcodes: 6=UPDATE, 7=DELETE, 9=CREATE, 11=ALTER
OR event LIKE 'PX%')
ORDER BY sample_time;
-
sql_opcode是硬指标:DDL 操作对应 opcode 9(CREATE)、11(ALTER)、12(DROP)、24(TRUNCATE)等,比依赖sql_text模糊匹配更可靠 -
qcsid和qc_session_serial#能区分 coordinator 和 slave,确认是否所有 slave 都在干活,还是只有 coordinator 在等 - 重点筛
event:若大量 slave 卡在PX Deq: Execute Reply或PX Deq: Table Q Normal,说明 coordinator 未及时分发任务;若卡在db file sequential read且p1text = 'file#',说明正在读源分区物理块,I/O 成瓶颈
识别并行 DDL 的三类典型瓶颈信号
从 ASH 样本中观察分布模式,比单看平均等待更有诊断价值:
-
IO 型瓶颈:多个 slave 同时、高频(>80% 样本)处于
db file sequential read或direct path read,p1(file#)高度集中 → 源表空间或临时表空间磁盘吞吐已达极限,不是 SQL 写得差,是硬件扛不住并发读 -
协调型瓶颈:coordinator(
qcsid对应会话)长时间处于ON CPU或latch: row cache objects,而 slave 大量停在PX Deq%类事件 → 并行度设太高,coordinator 解析/分配压力过大,需降低PARALLELhint 或ALTER SESSION ENABLE PARALLEL DML的 degree -
锁/争用型瓶颈:出现
enq: TX - row lock contention或enq: TM - contention,且current_obj#指向目标表或索引 → DDL 过程中与应用 DML 冲突,尤其MOVE PARTITION会触发 TM 锁升级,必须错峰执行
容易被忽略的 ASH 时间窗口陷阱
ASH 默认只保留约 1 小时(取决于 SGA 分配),而并行 DDL 可能持续数分钟但发生在凌晨低峰期——如果没提前开启 DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT 或设置足够大的 MEMORY_TARGET,样本可能已被覆盖。更危险的是:SAMPLE_TIME 是采样时刻,不是事件开始时间,单条记录无法体现等待持续时长;必须用 COUNT(*) OVER (PARTITION BY session_id, sql_id ORDER BY sample_time RANGE BETWEEN INTERVAL '1' SECOND PRECEDING AND CURRENT ROW) 类窗口函数判断连续阻塞趋势,否则会把间歇性卡顿误判为稳定瓶颈。











