首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Oracle 快速終結佔用高資源進程:OS 層 Kill + DB 層 Kill Session 雙重保險

     編輯:PHP 相關知識

問題背景

異常程序導致特定 Session 佔用大量 CPU/記憶體,標準 ALTER SYSTEM KILL SESSION 'sid,serial#' 釋放資源極慢(參考「Oracle中Kill session的研究」)。

雙層殺程序流程

  1. OS 層先殺背景進程:
    查詢對應 OS PID:
    SELECT 'kill -9 ' || spid FROM v$process WHERE addr = (SELECT paddr FROM v$session WHERE sid = :sid);
    執行 kill -9 <PID>
  2. DB 層再殺 Session:
    ALTER SYSTEM KILL SESSION 'sid,serial#';

實戰案例

SQL> SELECT sid,username,status FROM v$session;
...
154 SCOTT KILLED   -- 長時間處于 KILLED 狀態

SQL> SELECT 'kill -9 '||spid FROM v$process WHERE addr=(SELECT paddr FROM v$session WHERE sid=154);
'KILL-9'||SPID
--------------------
kill -9 22702

[oracle@danaly ~]$ kill -9 22702
[oracle@danaly ~]$ ps -ef | grep 22702  -- 進程消失
[oracle@danaly ~]$ exit

OS 層殺掉後,資源即時釋放,DB 層標記為 KILLED 的 Session 將徹底消失。

關鍵查詢腳本

-- 獲取 OS PID
SELECT s.sid, s.serial#, p.spid, s.username, s.status
FROM v$session s JOIN v$process p ON s.paddr = p.addr
WHERE s.sid = :target_sid;

注意事項

  • OS kill -9 為強制終止,可能導致該 Session 的未提交交易回滾延遲,但能立即釋放鎖與記憶體
  • 生產環境操作前務必確認 Session 狀態、影響範圍,並通知相關業務方
  • 若為 RAC 環境,需在對應 Instance 節點執行 OS kill
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved