[原创]数据库性能优化_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 25209 | 回复: 0   主题: [原创]数据库性能优化        下一篇 
    本主题由 Robin 于 2014-4-28 16:17:17 置为精华
linlin.yi
注册用户
等级:少校
经验:1024
发帖:75
精华:1
注册:2013-11-8
状态:离线
发送短消息息给linlin.yi 加好友    发送短消息息给linlin.yi 发消息
发表于: IP:您无权察看 2014-4-4 17:43:47 | [全部帖] [楼主帖] 楼主

1.问题描述
     用户门户系统为双节点的Oracle RAC,数据库版本为10.2.0.4。操作系统为HP-UX 11.31

根据用户发送过来的资料显示:随着系统用户在线人数的增加,两个节点的CPU的负载均出现过载的情况。

11月5日节点1的CPU的负载的监控曲线如下图所示:

北京联动北方科技有限公司

    从图中可以开出,在业务高峰点CPU的负载接近100%。

节点2的情况稍好,不过也不容乐观。

11月5日CPU的监控负载曲线如下图所示:

北京联动北方科技有限公司

不过在业务高峰期,CPU的利用率也超过了70%。

节点1业务高峰期实时的top命令如下图所示:

北京联动北方科技有限公司

节点2 实时监测的CPU负载如下图所示:

北京联动北方科技有限公司

          从上图可以看出在高峰期占用CPU最高的是名为ora_j000_sgeip2进程。在节点1达到75%,在节点2也达到了近35%,其次是有几个进程的CPU占用率也是比较高的。

2.问题分析

    1.经检查,两个节点的警告日志alert_sgeip1.log及alert_sgeip2.log在最近的一段时间只有关于日志切换的信息,并无可疑点。 

          2. 从门户数据库的CPU的曲线来看,节点1的CPU的负载主要集中在在9点到10点以及下午3点到4点这两个时间段,峰值甚至达到100%。节点2的 负载相对来说比较均衡,峰值在70%左右。证明应该是在业务高峰期间应该是有某个sql或者是某些任务在跑导致了这么高的CPU占用率。

             3. 从top命令来看,在这个时间段最消耗CPU的是ora_j000_sgeip1(ora_j000_sgeip2)这个job。从而证明了导致高CPU 占用率的是个任务(JOB),oracle对j000的官方解释是 http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/process.htm#sthref1602

     4. 既然是CPU占用率过高,那么具体的内容可以从awr报告中看出来的。

但是可以看到awr报告中的首要等待事件都是跟CPU无关的。而且整个过程中redo产生的数据量很小,证明修改数据并非很频繁。
从 awr报告中的等待事件一栏可以看出,数据库的等待事件排在前面的是log file parallel write、 events in waitclass Other、db file parallel write 也就是说并无与CPU相关的等待事件出现。所以衡 量CPU瓶颈的方式通常是看它的SQL ordered CPU Time及SQL ordered Gets这两个段可以找到一些线索。

     从这两个区段来看排在首位的是:

         北京联动北方科技有限公司

从名字上可以看出:这个job是Oracle Enterprise Manager产生的。最终调用了EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS这个存储过程。
同 时注意,下面还有两个SQL Module的SEVERITY EVALUATION状态的,这表示它是通过调用 EXECUTE_EM_DBMS_JOB_PROCS产生的,也就是排在前面几位的都是与这个job相关 的。而且可以看到,这两个语句执行的次数 (Executions)比其它的语句执行次数高了好几个数量级。
以此我初步断定,cpu瞬间负载达到100%可能是这个job产生的。因为以前em导致的bug也很常见。

使用一下sql脚本对CPU占用率最高的进程进程捕获:

北京联动北方科技有限公司

在上面的脚本中用实际的进程ID号来替换System Process ID 得到CPU占用率最高的脚本为:   

select count(*) from tbnetworkflow t where to_char(t.logindate1, ‘yyyy-mm’) = to_char (sysdate, ‘yyyy-mm’) and userid=’****’


     其中***为不同的用户名

     另外从awr报告的 SQL ordered by CPU Time 和 SQL ordered by Gets 来看

北京联动北方科技有限公司

从应用的业务逻辑角度来看,使用比较频繁的应该是以下的sql语句:

北京联动北方科技有限公司

3.结论分析

     建议可以先在业务高峰期禁用em, 如果不用em的话,可以一直禁用。

     禁用:

     1)emctl status dbconsole

     2)  emctl stop dbconsole

     3)emctl status dbconsole确认emctl已经关闭

     4)使用sysman用户登录。exec emd_maintenance.remove_em_dbms_jobs;

     如果想重新启用的话,可以采用如下方式进行:

     1) 使用sysman登录

     2) alter system set job_queue_processes=0;

     3)select * from dba_jobs_running;直到产生 “no rows selected”.

4)运行以下脚本:

\sysman\admin\emdrep\sql\core\latest\admin\admin_remove_dbms_jobs.sql;
\sysman\admin\emdrep\sql\core\latest\admin\admin_submit_dbms_jobs.sql;


     5)执行 exec emd_maintenance.recompile_invalid_objects;

     6)alter system set job_queue_processes=10;

     7)执行 select job,what from dba_jobs;确认EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS是否创建成功。

     8)exec dbms_job.run();




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论