最近一直研究数据库性能的问题,不知道高手们在数据库出现慢的时候都从哪些方面入手。另外在提问几个问题,目前我们的数据库总体比较慢(unix上) 用top命令看了,cpu和内存使用量都不大,buffer cahe ,临时表空间,都不小,各种命中率也都还可以,我只会检查这些参数,不知道是什么问题,请高手给点拨一下。另外 我用trace追踪几个进程,原始trc文件看不太懂,tkprof后好像好多信息都过滤掉了,除了能看到执行的语句外没有什么太多信息,请问高手们都是怎么从trc文件中提取有用信息的,有没有相关的文档给 推荐下,或者您受累给我发一下  [email protected],谢谢先。 希望大家对这个问题进行讨论一下,把相关的经验介绍下,把知道共享一下,我对这方面很感兴趣,呵呵,谢谢大家先

解决方案 »

  1.   

    我一般是先判断是应用程序使用觉得慢还是直接在数据库中查询慢,如果是前者,那么不一定就是DB慢,可能有其他原因。查DB慢,操作系统中查CPU、内存、IO(包括磁盘和网络),数据库中查wait事件、lock等,还有就是用statspack收集各统计值并生成报告。
      

  2.   

    首先看v$session_wait视图,看看哪个值高
      

  3.   

    俺最喜欢的还是看Oracle的Statspack来分析等待事件和Top SQL.
      

  4.   

    当出现系统慢时,首先要判断是否是数据库慢.
    这个可以通过查看等待事件就知道了,等待事件当前有多少? 什么样的等待事件? 和平时相比何如? 答案将是比较容易得出的.如果不是数据库的问题,那么就要去找其他的原因,比如网络,中间件层的系统资源等等.如果是数据库的问题,还是要从等待时间入手. 什么等待最多? 为什么会有这样的等待? 是因为锁呢,还是因为某些糟糕的语句被频繁执行,性能问题给凸显出来了,或者还是有用户在做大批量的数据处理,占用了过多的资源? 等等了,都需要去考虑一下,具体问题再具体解决.  当然,statspack,或者awr等都是不错的工具,可以结合起来使用.至于trace ,网上有很多例子,去搜一下吧. 上面只是我个人观点,如有不对,请大家指正.