华为云CentOS 7 Oracle19c CPU异常飚高问题排查及解决

CentOS7下Oracle19c CPU异常飚高问题排查及解决

提示:CentOS Linux release 7 ,oracle-database-ee-19c-1.0-1.x86_64.rpm:

项目环境配置:华为云4核16G ,CentOS 7.6 ,Oracle19c ,JDK8。


问题描述

线上环境oracle执行部分sql时cpu异常飚高且很长时间不会下降,逐步导致系统卡顿。

例如:如下图所示,通过监控软件可观察到,部分时段会出现CPU异常飚高。且无规律。

在这里插入图片描述


排查过程:

第一步先排查导致CPU飚高的大致方向:

线上环境用的是华为云服务器,那么硬件和CentOS7系统本身问题导致CPU高的可能性不大,可以优先排除。那么就从系统上安装的应用程序下手,系统中安装了JAVA程序和oracle数据库。还好应用程序不是很多比较好排查,开始怀疑是java程序中代码导致,于是安装相关监控或者JDK自带命令排查,发现都不是。这里我用了一款运维工具定位到的(finalshell专业版),当然前期排查过程是比较耗时的因为是偶发现象,所以需要先摸清cpu高时都有哪些操作。
在这里插入图片描述

第二步找到导致问题的具体原因:

工具定位出问题后,我们继续排查导致的具体原因。通过oracle一些相关sql命令来找出对应执行的sql
看看是不是慢sql导致,结果多次验证发现并不是sql慢查询,而是sql执行时,时快时慢。这么以来就发现导致问题的根本原因了,那么就很肯定的定位是oracle相关缓存或配置的问题。


-----查消耗CPU最高的20条:
select * from (select sql_text,sql_id,cpu_time from v$sqlarea order by cpu_time desc) where rownum<=20 order by rownum asc ; 

------ 或者通过pid查找对应sql:
1、
   SELECT addr FROM v$process c WHERE c.spid = 1560 ;
2、
   SELECT DECODE (sql_hash_value,
   0, prev_hash_value,
   sql_hash_value
   ),
   DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
   FROM v$session b
   WHERE b.paddr = '00000004B08F4DC8';

3、
   select a.sql_text,a.sql_id From v$sqltext a where a.hash_value='3838526855 ' and a.address='00000004DBAE9638' order by piece  ;


解决方案:

找到导致问题的根本原因后那么解决方案就很容易给出了:这里我们设置下两个oracle参数就行了。

//关闭缓存级别
alter session set “_optimizer_use_feedback”=false;
//关闭基数反馈
alter system set “_optimizer_use_feedback” = false;

记录总结:

经历过此次排查过程,其实不难看出解决问题的思路首先得明确,才能找到对应的解决方法。第一步先定位导致问题的大致方向,第二步找到导致出现问题的根本原因。最后是寻找对应的解决方案。以及养成良好的问题处理记录习惯!

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农转型历险记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值