早上遇到集团人员反映,说马司数据库系统切换后,还是出现CPU占用100%,接到电话后,连过去查看下。
应那边没设任何防范,很容易就连过去查看,TOP 下。
直接反映就是ORACLE出现问题,好几个进程都出现点用有10%以上。
利用SQL查看下,PID 进程中,是在执行什么任务。
SELECT SQLAREA.SQL_TEXT
FROM V$SESSION SESS, V$PROCESS PRO, V$SQLAREA SQLAREA
WHERE PRO.SPID = &SPID
AND SESS.PADDR = PRO.ADDR
AND SESS.SQL_ADDRESS = SQLAREA.ADDRESS;
或者是
select sql_text
from v$sqltext_with_newlines
where (hash_value, address) in
(select sql_hash_value, sql_address from v$session where sid = &sid)
order by address, piece;
可以用SPID 查询出SID
select ses.sid from v$session ses,v$process pro where pro.spid=&spid and ses.paddr=pro.addr; -- 23965
查看哪台机器引起
SELECT a.username,
a.machine,
a.program,
a.sid,
a.serial#,
a.status,
c.piece,
c.sql_text
FROM v$session a, v$sqltext c
WHERE a.sid = '174'
and a.sql_address = c.address(+)
ORDER BY c.piece
查看死锁
SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
FROM v$locked_object l,dba_objects o,v$session s
WHERE l.object_id=o.object_id
AND l.session_id=s.sid
ORDER BY o.object_id,xidusn DESC
解锁为
(1).先杀Oracle进程:
ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#';
(2).再杀操作系统进程:
KILL -9 刚才查出的SPID 或 ORAKILL 刚才查出的SID 刚才查出的SPID。
发现全是在查询语句。
WHERE A.CAR_ID = D.CAR_ID(+)
and a.work_time between :d1 and :d2
and a.crn_id like :crn_id
and cntr_no like :cntr_no
and nvl(d.car_code, 0) like :car_code
and nvl(work_man, 0) like :name
and a.cntr_opr like :pcntr_opr
and a.cntr_type like :pcntr_type
and a.cntr_size like :pcntr_size
and a.eqp_sta like :peqp_sta
union
where a.work_time between :d1 and :d2
and a.crn_id like :crn_id
and cntr_no like :cntr_no
and nvl(work_mans, 0) like :NAME
and nvl(a.BEG_FIELD_NAME, 0) like :car_code
and a.cntr_opr like :pcntr_opr
and a.cntr_type like :pcntr_type
and a.cntr_size like :pcntr_size
and a.eqp_sta like :peqp_sta
order by work_time desc
在此SQL中出现太多的like % 和 union 还有再排序下,造成资源一直浪费在这。
因属于生产库,第一反映就是KILL掉进程,不会让CPU爆掉。
kill -9 pid ;
将CPU占用10%以上的进程全KILL了,就恢复正常。
因属于工作时间,根本没有时间认真去研究下。只tail -100 alert_portdb.log下。
Sun Jun 20 19:00:41 2010
ARCH: Completed archiving log 1 thread 1 sequence 5659
Sun Jun 20 20:39:07 2010
Errors in file /oracle/admin/portdb/udump/portdb_ora_6751.trc:
ORA-07445: exception encountered: core dump [0000000100405A00] [SIGSEGV] [Address not mapped to object] [0x8FFFF7BB68790] [] []
Mon Jun 21 00:10:54 2010
SMON offlining US=11
SMON offlining US=12
Mon Jun 21 14:27:10 2010
Thread 1 advanced to log sequence 5661
发现从6月20号20:39就开始出现错误了,一发现ORA-07445问题就大了(第一意识)。
bash-3.00$ tail -100 /oracle/admin/portdb/udump/portdb_ora_6751.trc
发现全是查询语句的问题,这个只能跟开发人员联系,进行调优了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15242702/viewspace-665816/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15242702/viewspace-665816/