作爲一個壓力山大的DBA,很多時候需要面對處理一些緊急突發的救火任務,當業務出現異常,性能接近癱瘓的奪命一刻,需要果斷出擊,把系統業務的影響減少到最小,至於原因分析,可以交到後續分析,下面將針對不同的困境,作出排殺處理:
1,批量殺掉oracle連接進程:這種情況是終極絕招,在面對性能將要癱瘓的局面,可以立刻解決問題,但正在等待的業務或事務會被強行終止,需要重新請求!
ps -ef | grep LOCAL=NO | awk '{print $2}' | xargs kill -9
2,DBA能定位到引起性能異常的SQL,在數據庫還能連接響應的情況下,批量生成kill -9的SQL批殺腳本:
select 'kill -9 '||spid from v$process
where addr in
(select paddr from v$session where sid
in(select c.sid from v$session c
Where username ='MBS7_OMS' and event='SQL*Net message from dblink') );
3,DBA能定位到引起性能異常的schema,並且這個影響是整個schema層面業務的,在數據庫還能連接響應的情況下,查殺同一個用戶的會話:
select 'alter system kill session '''||c.sid||','||c.SERIAL# ||''';'
from v$session c Where username ='RRJC' ;
3,這個跟上面第二點相似,查殺同一個SQLID的會話:
select 'alter system kill session '''||c.sid||','||c.SERIAL# ||''' immediate;'
from v$session c
where sql_id='1vnbgy700u1cu' ;
4,有時候需要排查一些連接進程的情況,方便跟蹤性能問題,下面是查看同一個SQL_iD的登陸請求信息:
select sql_id,logon_time,machine,terminal,osuser
from v$session
where sql_id='1vnbgy700u1cu'
order by logon_time desc;
–謹記kill後面加immediate參數,否則會讓pmon回收很久!如不幸用了傳統kill,可用下面方法再度釋放:
select 'alter system kill session '''||c.sid||','||c.SERIAL# ||''' immediate;'
from v$session c
Where username ='FRNT'
and machine in ('jk2','biweb2')
and status='KILLED';
如果會話已經在DB裏killed,上面的SQL已經查不出spid,可以用下面的SQL查出SPID
select addr, pid, spid
FROM v$process p
where addr in (select p.addr
from v$process p
where pid <> 1
minus
select s.paddr from v$session s);
©版權聲明:本文爲天凱DBS的原創文章,轉載請附上原文出處鏈接及本聲明,否則將追究法律責任。
原文鏈接:https://dbs-service.cn/a/163.html