这几天,我碰到一个这样的问题,贴出来向高手请教:   我前两天去到客户现场的时候, 客户抱怨现在系统运行慢得受不了,我试着运行了一下客户端,确实是慢得受不了(因为系统运行初始化时,要取一些公共的信息读取到客户端本地来,这个过程居然要10来分钟), 因为系统已经运行一年多了, 我仔细检查了ORACLE数据库,有几个大点的表有1百多万了记录,其它的表一般也就几千了记录,不至于这么慢啊, 不管怎样,我开始考虑优化数据库, 把系统中一些主要的查询字段都建上索引,后来发现速度影响不大. 然后我开始清除DB中的垃圾数据,最后几乎清除系统中三分之一的数据量,后来系统运行速度好像变得非常快了,正当我以为问题已经解决了时,结果第二天早上,系统又一如既往的慢,慢得跟以前一模一样(10几分钟才能进去),郁闷了半个上午,到中午,系统居然又莫名其妙的非常快了(进系统不超过30秒钟),整个下午都非常快,然而第三天中午系统再次又很慢了.   而这三天,网速基本没什么变化(系统在内网中),客户端基本都只连了一个连接. 顺便说下系统结构,服务端是用DELPHI写的一个CGI的Web Services程序,放在IIS一个网站目录下,客户端是用DELPHI写的一个EXE,调用WEB SERVICES获取数据, 服务端的WEB SERVICES(CGI)会连接到另一台DB服务器抓取数据.    我不明白为什么速度为什么变化这么大, 速度慢的时候,在任务管理器中,会看到WEB SERVICES(CGI)会占用几十兆的内存.

解决方案 »

  1.   

    这种问题不再现场是很难回答的,如果数据库中的数据有频繁删除和增加的话,建议LZ做如下几个操作:--1.利用MOVE命令压缩表的高水位线,move之后要重新建立索引
    ALTER TABLE yourtablename MOVE;
    --2.从新统计表信息
    analyze table yourtablename compute statistics;
    --
      

  2.   

    1.检查出问题时主机的CPU、IO情况。
    2、对数据库做statspack,贴出结果。
      

  3.   

    1)基本可以判断,对数据库的优化动作没有解决问题,问题点在数据库之外另有其处。
    2)问题出现的时间点不确定,有早上,有中午。需要了解DB SERVER IIS SERVER是否是专用的,或许另外在执行其他的程序
    拉高了负载。
      

  4.   

    应用中有没有执行SQL时间等日志信息? 有的话可以用来定位什么地方慢。然后可以针对性进行表分析、重建统计信息,或者是检查是否有其他进程对数据库做大量操作,再或者说不准只是应用有问题,和数据库没关系。