设为首页 收藏本站
查看: 1095|回复: 0

[经验分享] Oracle进程导致CPU 100%解决步骤

[复制链接]

尚未签到

发表于 2016-7-30 20:58:20 | 显示全部楼层 |阅读模式
  1-- 检查系统



  sar -u 5 5



  2-- 看谁在用CPU



  topas



  ps -ef |grep ora #检查第四列,C的大小(unit,100 per cpu)



  3-- 检查CPU数量



  /usr/sbin/bindprocessor -q



  lsattr El proc0



  4-- 2种可能:



  1) A Background (instance) process



  2) An oracle (user) process #此种可能最大。

  5-- 如果是用户进程:那么高CPU的主要原因有:



  Large Queries, Procedure compilation or execution, Space management and Sorting



  5.1-- 查看每个Session的CPU利用情况:




<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->    select ss.sid,se.command,ss.value CPU ,se.username,se.program    from v$sesstat ss, v$session se    where ss.statistic# in    (select statistic#    from v$statname    where name = 'CPU used by this session')    and se.sid=ss.sid    and ss.sid>6    order by ss.sid






  5.2-- 比较上述Session,看那个session的CPU使用时间最多,然后查看该Session的具体情况:




<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->    select s.sid, event, wait_time, w.seq#, q.sql_text    from v$session_wait w, v$session s, v$process p, v$sqlarea q    where s.paddr=p.addr and    s.sid=&p and    s.sql_address=q.address;






  5.3-- 得到上述信息后,查看相应操作是否有hash joins 和 full table scans。如果有hash joins 和 full table scans那么必须创建相应的Index或者检查Index是否有效。



  另外必须检查是否有并行的查询存在和同一时刻有多个用户在执行相同的SQL语句,如果有必须关闭并行的查询和任何类型的并行提示(hints);如果查询使用intermedia数据,那么为了减少总的Index大小,必须限制使用Intermedia的Worldlist。(try restricting the wordlist that intermedia uses to help reduce the total indexsize)。

  6-- 上述方案只能根据已经运行完成的操作,对于正在执行的长时间操作只能等操作完成后才能检测得到。因此我们可以通过另外一个很好的工具来检测正在运行的长时间操作语句。v$session_longops,这个视图显示那些操作正在被运行,或者已经完成。每个process完成后会刷新本视图的信息。

  7-- 怎样寻找集中使用CPU的Process:



  很多时候会发现有N个Process在平均分享着CPU的利用率,这种情况唯一的可能性就是这些Process在执行着相同的Package或者Query.



  这种情况:建议通过statspack,在CPU高利用率额时候运行几个快照,然后根据这些快照检查Statspack报告,检查报告中最TOP的Query。然后使用 sql_trace and tkprof 工具去跟踪一下。同时检查buffer cache 的命中率是否大雨95%。

  同时在报告中还需要检查一下table scans (long tables),看是否在报告生成期间有存在全表扫描。

  8-- 另外还有一些不是特别重要的,但是也必须关心检查的参数可能消耗CPU。



  parallel query 并行查询:



  并行查询最好用于数据仓库的环境下,那种情况任何时候只有几个用户在同时使用。在一个联机事务处理环境中,当同时许多用户去并行查询一个数据库的巨大表时候,会导致CPU的爆满。所以最好在数据库的级别关闭并行查询:设置参数如下:




<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->    parallel_min_server = 0    parallel_max_server = 0    parallel_automatic_tuning = false;






  在配置上述参数后,如果SQL语句中使用的并行的提示,那么还是有可能会出现并行查询的情况,所以还需要继续监视相关的SQL语句,如果有就去除提示,以达到目的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-251397-1-1.html 上篇帖子: oracle 基础知识:两个number列相加 下篇帖子: oracle plsql中使用正则表达式。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表