Username: Password:

怎样快速杀死占用过多资源(CPU,内存)的数据库进程
来源:CSDN作者: eygle 发布时间:2008-02-02 00:00:00

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

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

今天就碰到这样一个案例,其他朋友在数据库里kill session,可是长时间仍无效果:
[oracle@danaly ~]$ sqlplus "/ as sysdba"SQL*Plus: Release 10.2.0.1.0 - Production on Thu Oct 27 11:09:50 2005Copyright (c) 1982, 2005, Oracle.  All rights reserved.Connected to:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine optionsSQL> 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: 154old   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 22702SQL> !

在操作系统级kill该进程:
[oracle@danaly ~]$ ps -ef|grep 22702oracle   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 22702oracle   12088 12063  0 11:12 pts/1    00:00:00 grep 22702[oracle@danaly ~]$ exitexitSQL> 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

此时该进程被迅速清除。

查看本文来源

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅