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是代表索引正常