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

2016-01-29 16:29 15 1 收藏

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

【 tulaoshi.com - SQLServer 】

 

很多时候由于异常或程序错误会导致个别进程占用大量系统资源,需要结束这些进程,通常可以使用以下命令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 2005

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

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;

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

       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;

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

       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

 


此时该进程被迅速清除。

 

来源:http://www.tulaoshi.com/n/20160129/1498716.html

延伸阅读
标签: SQLServer
      安装Oracle数据库后,当我们访问8080端口时,会弹出一个XDB窗口,要求输入用户名和密码。这样将和我们本地一些使用该端口的应用冲突,比如tomcat、jboss等,虽然这些端口是可以修改的,但总是不爽oracle一直占用这个端口。以下是我找到的一个方法,我已经试验成功了,如果你想用此法进行修改,请首先备份数据库重要...
标签: 电脑入门
在使用电脑时,突然发现系统变慢了,一看任务管理器,才发现CPU占用达到100%。这是怎么回事情呢?遇到病毒了,硬件有问题,还是系统设置有问题,在本文中笔者将讲解系统资源占用率为什么会达到100%。 1、驱动没有经过认证,造成CPU资源占用100%。大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因。 2、防、杀毒软件造成故障。由于一些防...
标签: windows 操作系统
1、驱动没有经过认证,造成CPU资源占用100%。大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因。 2、防、杀毒软件造成故障。由于一些防、杀毒软加入了对网页、插件、邮件的随机监控,无疑增大了系统负担,可以根据情况有选择的开启服务。 3、病毒、木马造成。大量的蠕虫病毒在系统内部迅速复制,造成CPU占用资源率据高...
标签: 电脑入门
VCHOST是Windows中最神秘的进程,很多新用户对它很不解。它是Windows的服务宿主,很多系统自带的服务通过它来运行。简单的比喻,它相当于系统服务的马甲。但是SVCHOST有时候CPU占用会非常高,如何看透它的马甲找出真凶呢?我们通过任务管理器来找出它的元凶。 STEP01进入任务管理器:在任务栏的空白处点击右键,选择任务管理器以打开任务管理器...
经常看见有人问,MSSQL占用了太多的内存,而且还不断的增长;或者说已经设置了使用内存,可是它没有用到那么多,这是怎么一回事儿呢? 首先,我们来看看MSSQL是怎样使用内存的。 最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给...

经验教程

151

收藏

79
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部