玩命加载中 . . .

Oracle


oracle占用CPU100%

背景:迁移4.5迎新windows数据库服务器后,经常出现cpu100%占用,后来排查到是迎新系统有财务的定时调度,数据量比较大导致cpu占满。此文档记录查到原因的过程与解决方案。

  1. windows有个很强大的软件Process Explorer

    1. 下载地址:https://www.onlinedown.net/soft/31805.htm
  2. 下载这个软件,里面有3个可执行文件,选第一个就行,放到问题服务器上(数据库服务器)

  3. 打开任务管理器,发现是oracle rdbms占用cpu较高

  4. 打开该软件,找到oracle rdbms进程,双击,点击Threads

  5. 查看到使用最高的线程tid

    image-20220116162912007

  6. 进入plsql,查询sql_id

    需要多次执行,找到出现频率最高的sql_id

    select sql_id from v$session  
      where paddr in(  
        select addr from v$process  
        where spid in('70224')  
     )  
    
  7. 根据6中的sql_id查询具体执行占用CPU过高的sql语句

    这时就可以判断出是什么sql语句在占用cpu,这里查到是财务缴费的sql语句

    select * from v$sqlarea where sql_id in(sql_id1,sql_id2,sql_id3...);  
    
  8. 根据6中的sql_id,查询sid和serial

    需要多次执行,找到出现频率最高的(执行一次可能会查询不到,因此需要多执行)

    SELECT sid,serial#,sql_id from v$session where sql_id in(sql_id1,sql_id2,sql_id3...)  
    
  9. 杀掉进程

    alter system kill session 'sid,serial#';  
    

    这时问题得以解决,但只是暂时的,因为迎新会定时调度执行,到时候还是会占用。

    因此后期还需要排查为什么会占用,优化sql,当然这些工作就交给研发,我们排查到这里就可以了。

如果不是sql占用导致的,也有可能是监听的日志文件较大导致的。

原因:windows的oracle数据库会有这种情况,不会自动清理监听日志,需要我们手动清理

解决:

  1. 找到监听日志地址/u01/app/grid_base/diag/tnslsnr/rac1/listener/trace
  2. 如果过大就清空即可

文章作者: 小苏
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小苏 !
评论
  目录