1. 程式人生 > >Oracle HowTo:如何快速殺死佔用過多資源(CPU,記憶體)的資料庫程序

Oracle HowTo:如何快速殺死佔用過多資源(CPU,記憶體)的資料庫程序

作者:eygle
出處:http://www.eygle.com/blog
日期:October 27, 2005
本文連結:http://www.eygle.com/archives/2005/10/oracle_howto_kill_session.html
很多時候由於異常或程式錯誤會導致個別程序佔用大量系統資源,需要結束這些程序,通常可以使用以下命令Kill程序:
alter system kill session 'sid,serial#';

但是此命令釋放資源極為緩慢,具體可以參考:Oracle中Kill session的研究.
為了更快速的釋放資源,通常我們使用如下步驟來Kill程序:
1.首先在作業系統級kill程序
2.在資料庫內部kill session
這樣通常可以快速中止程序,釋放資源。

今天就遇到這樣一個案例,其他朋友在資料庫裡kill session,可是長時間仍無效果:
[
[email protected]
~]$ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.1.0 - Production on Thu Oct 27 11:09:50 2005 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options SQL> select sid,username,status from v$session; SID USERNAME STATUS ---------- ------------------------------ -------- .... 154 SCOTT KILLED ... 30 rows selected.

那按照我前面提到的步驟,首先查詢得到該session對應的OS程序號:
SQL> select 'kill -9 '||spid from v$process where addr = (select paddr from v$session where sid=&sid);
Enter value for sid: 154
old   1: select 'kill -9 '||spid from v$process where addr = (select paddr from v$session where sid=&sid)
new   1: select 'kill -9 '||spid from v$process where addr = (select paddr from v$session where sid=154)

'KILL-9'||SPID
--------------------
kill -9 22702

SQL> !

在作業系統級kill該程序:
[[email protected] ~]$ ps -ef|grep 22702
oracle   22702     1  0 Oct25 ?        00:00:02 oracledanaly (LOCAL=NO)
oracle   12082 12063  0 11:12 pts/1    00:00:00 grep 22702
[[email protected] ~]$ kill -9 22702
[[email protected] ~]$ ps -ef|grep 22702
oracle   12088 12063  0 11:12 pts/1    00:00:00 grep 22702
[[email protected] ~]$ exit
exit

SQL> select sid,username,status from v$session;

       SID USERNAME                       STATUS
---------- ------------------------------ --------
...
       154 SCOTT                          KILLED
...

30 rows selected.

SQL> select sid,serial#,username from v$session where sid=154;

       SID    SERIAL# USERNAME
---------- ---------- ------------------------------
       154      56090 SCOTT

再次在資料庫中kill該session,並指定immediate選項:
SQL> alter system kill session '154,56090' immediate;

System altered.

SQL> select sid,serial#,username from v$session where sid=154;

no rows selected

此時該程序被迅速清除。

相關推薦

Oracle HowTo:如何快速殺死佔用過多資源(CPU,記憶體)的資料庫程序

作者:eygle出處:http://www.eygle.com/blog日期:October 27, 2005本文連結:http://www.eygle.com/archives/2005/10/oracle_howto_kill_session.html 很多時候由於異常或

Linux終端檢視最消耗CPU記憶體程序

開發十年,就只剩下這套架構體系了! >>>   

Oracle Ologgerd程序佔用過多CPU資源

登入上OS使用top發現消耗系統資源較多的程序是ologgerd。 metalink上有類似的文件:Node Eviction due to OLOGGERD High CPU (文件 ID 1636942.1) Loggerd uses high cpu and do lots of I/O to th

如何快速使用這款資源消耗小功能強大的思科模擬器(乾頤堂一體化模擬器)

思科模擬器 乾頤堂1.下載安裝完成vmwareworkstations並導入iou2.設置虛擬網卡 ?打開網絡和共享中心?進入vmnet1進行ip配置 3.橋接?進入虛擬機界面,使QYT-RS&SP處於關閉狀態?設置虛擬機網卡模式選中虛擬機右鍵進入設置 選擇網絡適配器 自定義(VMnet1)並

如何快速清理 Docker 無用資源

選項 doc nta bash 我們 一次 而不是 force repos 如果經常使用 docker,你會發現 docker 占用的資源膨脹很快,其中最明顯也最容易被察覺的應該是對磁盤空間的占用。本文將介紹如何快速的清理 docker 占用的系統資源,具體點說就是刪除那些

Oracle 10 TNSLSNR.EXE 佔用了8080埠的處理方法

oracle 10服務一啟動 TNSLSNR.exe 會佔用8080埠,這時,需要改一下埠: 登入SQL*PLUS: -- 把HTTP/WEBDAV埠從8080改到8081 SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get

快速清理 Docker 無用資源

docker 佔用的資源膨脹很快,其中最明顯也最容易被察覺的應該是對磁碟空間的佔用。本文將介紹如何快速的清理 docker 佔用的系統資源,具體點說就是刪除那些無用的 映象、容器、網路和資料卷。 一、檢視 docker 佔用的資源 docker container ls:預設只列出正

一.背景 先說下windbg使用場景.各位coder在工作中或多或少都會遇到下面四種情況 1.原生代碼好好的,放伺服器上執行一段時間後,IIS服務突然佔用 w3wp.exe CPU突然100% ,

一.背景 先說下windbg使用場景.各位coder在工作中或多或少都會遇到下面四種情況 1.原生代碼好好的,放伺服器上執行一段時間後,IIS服務突然佔用 w3wp.exe CPU突然100% ,不得不回收應用程式池,如果哪次回收晚了,被客戶發現,後果很痛苦~ 2.你的w3wp.

Oracle HowTo:如何獲得資料庫的DBID

在進行資料庫恢復的過程中,很多時候我們需要知道Oracle資料庫的DBID,通常有以下幾種方法可以獲得資料庫的DBID.1.查詢v$database獲得由於DBID在控制檔案和資料檔案中都存在記錄,所以如果能夠mount資料庫就可以查詢v$database檢視獲得.   

window 中殺死佔用某個埠號的程序

第一步,開啟cmd命令視窗,輸入命令,根據埠號查詢對應的程序號 netstat -ano | findstr 8080 //檢視8080埠 netstat -ano | findstr 80 //列出程序及其佔用的埠,並且包含80 發現8080埠被PID(程序號)為952的程

Laravel佔用過多的php-fpm解決方式

近日發現所做的網站有一個php-fpm程序超多,經常卡死。。。細究原因。。發現報的這個錯誤: [21-Mar-2018 14:46:57] [pool www] pid 5897 script_filename = /home/htdocs/wkds/public/index.php [0x

linux, kill掉佔用60%多cpu程序,幾秒後換個名稱和pid又出現?

假設木馬的名字是nshbsjdy,如果top看不到,可以在/etc/init.d目錄下面檢視 1、首先鎖定三個目錄,不能讓新木馬檔案產生 1 2 3 4 chmod 000 /usr/bin/nshbsjdy chattr 

TCP連線佔用資源

版權宣告:本文為博主原創文章,未經博主允許不得轉載,轉載請註明出處。 https://blog.csdn.net/fox_hacker/article/details/41440561 維持一個tcp連線需要佔用哪些資源,下面就總結一下最近學習的內容,不足之處,請讀者多多指正。 一個

Linux查詢記憶體CPU佔用最多的幾個程序

一、可以使用以下命令查使用記憶體最多的10個程序 方法1: ps -aux | sort -k4nr | head -10 如果是最高的三個,10改為3即可 命令解釋:  1. ps:引數a指代all——所有的程序,u指代userid——執行該程序的使用者id

解決CentOS 7中php-fpm程序數過多導致伺服器記憶體資源消耗較大的問題

本文由荒原之夢原創,原文連結:http://zhaokaifeng.com/?p=653 什麼是php-fpm: php-fpm即FastCGI程序管理器,用於控制php的記憶體和程序等。 操作環境: CentOS 7 問題檢查: 首先檢視php程序總數: p

Windows中殺死佔用某個埠的程序

第一步 根據埠號查詢對應的程序號 netstat -ano | findstr 80 //列出程序極其佔用的埠,且包含 80 1 結果如下:  發現 8080 埠被 PID(程序號)為 9268 的程序佔用。 第二步 據程序號尋找程序名稱 tasklist | fi

windows下端口占用解決方法-檢視和殺死佔用程序

在Windows下啟動程式時有時會遇到埠被佔用的情況,由於一個埠同時只能執行一個程序,所以要想啟動新的程式就要先把佔用該埠的程序給kill掉,具體的命令分為以下三步, 以殺死佔用了80埠的程序為例: 1、根據埠號“80”查詢程序號 netstat -ano|findstr "80" TCP

Linux一句命令之獲取CPU記憶體佔用

命令: while sleep 1; do ps -aux | grep firefox | awk 'NR==1{print "CPU: "$3"%", 

解決ABAP獲取大量資料而被佔用過多記憶體等問題

 1.最主要的是儘量減少I/O操作,然後是記憶體佔用,在再就是CPU的負載。類似對硬碟的讀寫的I/O操作是最耗費時間的。   如果對記憶體的操作不加以控制,可能有些時候不得不對硬碟的交換空間操作,這樣就增加了對磁碟的I/O讀寫操作。   CPU的負載可以通過優化程式來改善,在程式中儘量使用諸如SUM(SQL語

C盤Hiberfil.sys檔案佔用過多空間

Hiberfil.sys 是 Windows 休眠功能(Windows Hibernation)將記憶體資料與會話儲存至硬碟、以便計算機斷電重新啟動後可以快速恢復會話所需的記憶體映象檔案。在早期版本的 Windows 中,Hiberfil.sys 檔案的大小等同於實體記憶體大