遇到问题
oracle 数据库 job跑的很慢
方法1
排查办法
打开plsql,执行:
select * from gv$sql_monitor where username=‘myuser1’ order by elapsed_time desc
其中,把myuser1 换成实际运行job的用户
然后看 查询结果的sql_text 列和 elapsed_time 这两列:
elapsed_time这一列单位是微秒。如图所示,发现了大量慢sql ,经对比,确实是job对应的存储过程里面的语句。经分析发现该sql 语句因跨数据库实例查询、存在两个嵌套查询导致性能不佳。
解决办法
停job --> 改写慢sql 语句 --> 再开启job 即可
方法2
select * from gv$sql_plan_monitor order by physical_read_bytes desc;
可以看到,出现较多的全表扫描。
方法1 和 方法2 结合起来用,效果更好!