Oracle数据库为什么变慢了?

本文出自《网管员世界》20002年第8期“故障诊断”栏目

硬件环境: SUN250服务器,1G CPU , 512M Ram , 18G SCSI硬盘
系统环境: SUN Solaris 2.7
服务环境: Oracle 8.1.6

周五我发现Oracle数据库在执行程序时的响应特别慢,整个数据库服务所在的SUN Solaris 2.7系统也是这样,无论运行什么程序都比往常慢了好几倍,有的程序甚至执行后,一直处于等待的状态,无法运行!

凭自己的直觉,出现这种问题,一般是系统中出现了什么异常的程序,于是马上用ps命令查找,但是没有发现任何非法的程序,也没有黑客入侵的迹象。那是不是病毒的原因呢?这个想法在脑子里一闪。对,有可能,UNIX系统中不是没有病毒的!但这种几率发生的情况一般比较少。于是自己马上top命令动态查看系统资源的使用情况(可以设置top命令的刷新率为1秒,并只监控Oracle用户即数据库的进程),在Solaris系统运行命令提示符后键入top回车,然后设置top命令的刷新率为1秒,具体操作方法:当top命令运行后,敲键盘s键,在提示信息后面再敲键盘的数字键1后回车即可;再设置top命令只监控Oracle用户的进程,具体操作方法:当top命令运行后,敲键盘u键,在提示信息后再敲入Oracle,然后回车即可。
这时系统进程的运行情况会如下图所示:


于是我仔细查看上面的的运行结果,果然有了一个重大的发现,在上面的图像中可以察看到系统一直正在运行的 6028 进程(图中左列的第一个PID),发现此进程占系统资源比较大(CPU使用率为49.41%),系统CPU闲置资源为0.0%,这个程序对服务器都作了什么呢,为什么导致整个系统的CPU资源都耗尽了?
带着这个问题又到网上仔细的查了一些资料,功夫不负有心人,终于从一些文章中获知可能是由于数据库正在执行的某个SQL语句对有大量记录的数据表操作引起的。为了进一步证实,我用SQL语句进行查询,以system用户登陆SQL*Plus,执行命令如下:

$ su -l oracle
$ sqlplus system/manager
SQL> select sql_text from v$sql
2  where address in (
3 select sql_address from v$session where sid in (
4 select sid from v$session where paddr in (
5 select addr from v$process where spid=6028)));

然后会显示信息:
SQL_TEXT
select bbsid,motherid,authorid,authorip,bbsdate,bbscontent,authortype,
discussed from BK_BBS where motherid=122983 order by bbsdate
继续用下面的语句对上面信息中的BK_BBS表进行查询(注意要以BK_BBS表所属的用户登陆运行并运行SQL*Plus):
SQL>conn user1/pass1;
SQL>select count(*)  from  BK_BBS;
   COUNT(*)
---------
    140731
结果发现BK_BBS表中的数据记录很多(有14万多条记录,而且这个表没有创建索引,难怪会出现问题),终于找到了数据库变慢的原因了:看来是由于当前数据库正在运行上面信息中的SQL语句对BK_BBS表进行查询的程序,由于此表中的数据记录非常多,数据库一直没有释放这个数据库的会话,导致运行这条SQL语句的进程一直占用系统的资源,从而影响了整个数据库的性能。
因此为了避免这种情况的发生,需要优化上面的SQL语句,比如在执行的表BK_BBS中根据表中的主要字端建立索引,或联合索引即可立刻解决此种问题的发生,命令如下:

SQL>conn user1/pass1
SQL>create index BK_BBS_IND on BK_BBS (bbsid,motherid);

然后我再用top命令,对系统性能进行查询,发现整个系统和数据库的性能已经完全恢复,这时自己长长的舒了一口气,问题终于解决了。
小结:可见,利用top命令和SQL语句结合的方法可以实现对Oracle数据库的监控和优化,从而使数据库服务器的性能得以提升。

本篇文章来源于 百科全书 转载请以链接形式注明出处 网址:http://www.siaaa.com/wl/gl/sj/Oracle/200910/93207.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值