当前位置:首页 > 技术与方案 > 数据库技术相关

Oracle数据库变慢的原因

(2012-09-04 19:30:48)

硬件环境: 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数据库的监控和优化,从而使数据库服务器的性能得以提升。
 

更多
关闭窗口 打印 
网站首页    -    联系我们    -   收藏本站    -    网站地图                                                               客户服务热线:0571-85023000
本网站所有网页信息已申请知识产权和著作权保护,版权归四海光纤公司所有,未经授权禁止任何人复制或镜像,违者必究。
公司主营:杭州光纤光缆视频会议系统,是专业的通信网络工程、视频会议系统建设专家

中华人民共和国备案号:浙ICP备10018243号