oracle性能问题排查~记一个单实例的问题

oracle的第一篇文章~菜鸟遇到的cpu高问题
一 简介:本人乃一个oracle超级菜菜鸟,开始连基本排除问题的思路都没有,后来请教了高人,才学会了一些
    场景问题:测试环境oracle单实例,IO和内存都不高,只有cpu暴涨,导致系统负载高居不下
二 分析思路:
  1 收集相关诊断报告(非常重要)
      1收集awr报告
 
     2 收集ash报告
 2 根据 ash和awr报告进行分析
    ash报告重点关注 Top SQL with Top Events(此处是top CPU的消耗排行,从大到小) 
   关注   

   1 event 会反应出SQL状态 (本次报告 latch: cache buffers chains) 

   2 Top Row Source 会反应出sql的explain(本次报告为全表扫描)
   3 sql_id 定位出sql的ID号
   4 SQL Text SQL的内容
   5 % Activity sql的繁忙程度

   

 


三 经过师兄的指点,可以发现,这第一条SQL执行的频率最高,并且全表扫描,cpu耗时也很高,基本上能推断出为罪魁祸首(对于latch导致的争用要首先干掉此类sql),将SQL反应给研发,研发进行处理,负载降低
四 补充 latch:cache buffers chains解读
   1. 低效率的SQL语句(主要体现在逻辑读过高)
      在某些环境中,应用程序打开执行相同的低效率SQL语句的多个并发会话,这些SQL语句都设法得到相同的数据集,每次执行都带有高 BUFFER_GETS(逻辑读取)的SQL语句是主要的原因。相反,较小的逻辑读意味着较少的latch get操作,从而减少锁存器争用并改          善  注意v$sql中BUFFER_GETS/EXECUTIONS大的语句。
   2.Hot block
      当多个会话重复访问一个或多个由同一个子cache buffers chains锁存器保护的块时,热块就会产生。当多个会话争用cache buffers chains子锁存器时,就会出现这个等待事件。有时就算调优了SQL,但多个会话同时执行此SQL,那怕只是扫描特定少数块,也是也会          出现HOT BLOCK的。
五 常用命令
  1 根据sql_id生成解析树
  select plan_table_output from table (dbms_xplan.display_awr('sql_id',null,null,'ADVANCED +PEEKED_BINDS'));
  2 查看oracle table索引是否失效
  select index_name,status from dba_indexes where table_name=upper('tablename') vald是代表索引正常

posted @ 2017-09-28 14:48  开心的蛋黄派  阅读(170)  评论(0)    收藏  举报