Welcome 微信登录

首页 / 数据库 / MySQL / Oracle性能问题诊断一例

今天一打开数据库,我还什么事情都没做,就发现硬盘灯狂转。这是为啥?初步判定是Oracle的计划任务在运行,但是哪个在运行,还不知道。所以,第一步先判断后台在跑什么东西:
select * from v$session_longops where sofar <> totalwork 从这个可以了解到大部分信息,包括:
1、session信息:sid,serial#
2、执行内容:target_desc
3、执行进度:sofar/totalwork
4、开始时间:start_time
5、执行用户:username
6、sql信息:sql_id,sql_address,sql_hash_value根据以上内容,其实我就已经可以强制停止这个的sql了,但是还得找出这个源头,也就是“责任人”--谁执行了这个sql。于是,第二个步骤就是根据上面的第五点:执行用户,去找该用户下对应的计划任务或job:1、job:
select * from user_jobs
2、计划任务:
select * from user_scheduler_jobs;从这里我知道了发起人及具体发起的那个执行点。
接下来的事情就简单了,先确认下这个定时处理的是什么内容,如果没有用或对当前环境无关紧要,则关闭job或计划任务:
exec dbms_job.broken(21,true);

exec dbms_scheduler.disable("AUTO_SPACE_ADVISOR_JOB");--这是例子当然,有时候不是直接关闭就行了,还得看下为何会产生这么大的磁盘扫描。这个时候就要去看sql的执行计划,搞清原因,然后对其优化。这次我本地产生这个问题的原因其实很简单,因为导入dmp的时候没有指定索引,索引后台处理的时候都是走的全表扫描,导致出现这个情况。最后,关闭之后,还有做一件事情,就是把正在执行的过程停止掉:
alter system kill session "sid,serial#"Oracle alter table实例Oracle表空间收缩方案相关资讯      Oracle错误代码 
  • Oracle错误代码大全  (02/16/2015 21:31:57)
  • Oracle中登陆时报ORA-28000: the   (03/06/2013 20:06:23)
  • Oracle 11g startup时报ORA-03113  (02/21/2013 17:25:55)
  • Oracle Grid Control OUI-25031错  (03/09/2013 09:01:36)
  • ORA-04091:触发器/函数不能读  (02/25/2013 08:28:13)
  • Oracle错误 ORA-12514 解决方法  (02/18/2013 08:50:10)
本文评论 查看全部评论 (0)
表情: 姓名: 字数

版权所有©石家庄振强科技有限公司2024 冀ICP备08103738号-5 网站地图