如何快速诊断Oracle 19c物化视图刷新慢及检查刷新作业状态?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1105个文字,预计阅读时间需要5分钟。
相关专题
查物化视图刷新是否卡在 longops 里
物化视图刷新慢,第一反应不是看执行计划,而是确认它到底“卡没卡住”。oracle 把长时间运行的操作(比如刷新)记在 v$session_longops 里,只要还没超时、没报错,就可能挂在这儿不动。
执行这个查询能快速定位:
SELECT sid, serial#, opname, target, sofar, totalwork, ROUND(sofar/NULLIF(totalwork,0)*100,2) pct_done, elapsed_seconds, sql_id FROM v$session_longops WHERE opname LIKE '%refresh%' AND totalwork > 0 AND sofar < totalwork;
常见现象:
-
opname是Refresh materialized view,但pct_done长时间不动 → 刷新被阻塞或基表锁住 -
sql_id为空 → 刷新还没真正生成 SQL,卡在元数据检查或日志读取阶段 -
elapsed_seconds超过预期(比如已跑 20 分钟,而历史平均才 2 分钟)→ 需进一步查该sql_id的真实执行计划
用 DBMS_MVIEW.EXPLAIN_MVIEW 先验判断能否快刷
别等 DBMS_MVIEW.REFRESH 跑完才发现是 complete 刷新。
本文共计1105个文字,预计阅读时间需要5分钟。
相关专题
查物化视图刷新是否卡在 longops 里
物化视图刷新慢,第一反应不是看执行计划,而是确认它到底“卡没卡住”。oracle 把长时间运行的操作(比如刷新)记在 v$session_longops 里,只要还没超时、没报错,就可能挂在这儿不动。
执行这个查询能快速定位:
SELECT sid, serial#, opname, target, sofar, totalwork, ROUND(sofar/NULLIF(totalwork,0)*100,2) pct_done, elapsed_seconds, sql_id FROM v$session_longops WHERE opname LIKE '%refresh%' AND totalwork > 0 AND sofar < totalwork;
常见现象:
-
opname是Refresh materialized view,但pct_done长时间不动 → 刷新被阻塞或基表锁住 -
sql_id为空 → 刷新还没真正生成 SQL,卡在元数据检查或日志读取阶段 -
elapsed_seconds超过预期(比如已跑 20 分钟,而历史平均才 2 分钟)→ 需进一步查该sql_id的真实执行计划
用 DBMS_MVIEW.EXPLAIN_MVIEW 先验判断能否快刷
别等 DBMS_MVIEW.REFRESH 跑完才发现是 complete 刷新。

