如何快速杀死占用过多资源(CPU,内存)的数据库进程

港桦汽贸1

港桦汽贸1

2016-01-29 16:29

如何快速杀死占用过多资源(CPU,内存)的数据库进程,如何快速杀死占用过多资源(CPU,内存)的数据库进程
 

很多时候由于异常或程序错误会导致个别进程占用大量系统资源,需要结束这些进程,通常可以使用以下命令Kill进程:
alter system kill session 'sid,serial#';

 

但是此命令释放资源极为缓慢,具体可以参考:Oracle中Kill session的研究.
为了更快速的释放资源,通常我们使用如下步骤来Kill进程:
1.首先在操作系统级kill进程
2.在数据库内部kill session
这样通常可以快速中止进程,释放资源。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

今天就遇到这样一个案例,其他朋友在数据库里kill session,可是长时间仍无效果:
[oracle@danaly ~]$ 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该进程:
[oracle@danaly ~]$ 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
[oracle@danaly ~]$ kill -9 22702
[oracle@danaly ~]$ ps -ef|grep 22702
oracle   12088 12063  0 11:12 pts/1    00:00:00 grep 22702
[oracle@danaly ~]$ exit
exit

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

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

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

 


此时该进程被迅速清除。

 
展开更多 50%)
分享

猜你喜欢

如何快速杀死占用过多资源(CPU,内存)的数据库进程

SQLServer
如何快速杀死占用过多资源(CPU,内存)的数据库进程

关于MSSQL占用过多内存的问题

SQLServer
关于MSSQL占用过多内存的问题

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Action 造成cpu占用过多的奇怪问题

Delphi
Action 造成cpu占用过多的奇怪问题

解决MSSQL占用过多内存的简单方法

编程语言 网络编程
解决MSSQL占用过多内存的简单方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

解决MSSQL占用过多内存的简单方法介绍

SQLServer
解决MSSQL占用过多内存的简单方法介绍

火狐浏览器占用过多内存的解决方法

浏览器
火狐浏览器占用过多内存的解决方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《明星大乱斗X》亚空可玩修改-研究专用(Wii)

《明星大乱斗X》亚空可玩修改-研究专用(Wii)

优化Oracle库表设计的若干方法

优化Oracle库表设计的若干方法
下拉加载更多内容 ↓