- 最后登录
- 2015-4-22
- 在线时间
- 122 小时
- 威望
- 133
- 金钱
- 1304
- 注册时间
- 2012-2-22
- 阅读权限
- 50
- 帖子
- 144
- 精华
- 1
- 积分
- 133
- UID
- 254
|
2#
发表于 2014-10-31 14:45:21
--从这里找到sql执行顺序和过程
select * from v$active_session_history where session_id=1119 order by to_char(sample_time,'yyyymmdd hh24:mi:ss') desc ;
17c1tm4udwh50 --> 8gbybvnypwftf 「这个sql_id只有4条记录,此时报错就是这条sql」
取出来单独执行,也报错了, 多次使用命令查看这个job执行时占了多少内存
方法1:ps axu | grep 16160 | grep -v grep | awk '{print $5,$6} --1位置虚拟内存占用,2位置实际物理内存占用
21799244 654392
方法2:top --> shift + M 按内存占用排序,RES为真实物理内存占用
第1次run job,报错了,但是才占用了330M内存(job run过程中多次执行最后一次有结果,因为被oom killer杀掉后,就没有这个进程了),时间67s报错「由v$active_session_history得知」
$ ps axu | grep 26253 | grep -v grep | awk '{print $5,$6}'
21637524 332456
第2次run job,成功了,但是最近占用将近1G内存,时间为172s,而且是成功的
$ ps axu | grep 26253 | grep -v grep | awk '{print $5,$6}'
21799244 990376
那我们来看sql_id='8gbybvnypwftf'是什么,
单独手动执行一次,居然也报错了,时间很快,大概1s就报错了
再看执行计划,执行计划「采用并行了」
把涉及的表,degree从DEFAULT改为1
不知道小伙伴,还有其他想法和思路 |
|