Oracle数据库CPU使用率过高问题处理

1.下载Process Explorer

2.打开Process Explorer,查看CPU使用情况最高的进程

 

3.双击该进程,查看详情

\

4.    获取cpu使用最好的线程tid

5.    查询sql_id

select sql_id from v$session  
  where paddr in(  
    select addr from v$process  
    where spid in('16796','11972','9812','11652','5484')  
 )  

6.根据5中的sql_id查询具体执行占用CPU过高的sql语句

select * from v$sqlarea where sql_id in(sql_id1,sql_id2,sql_id3...);  

7.查询sid和serial#

SELECT sid,serial#,sql_id from v$session where sql_id in(sql_id1,sql_id2,sql_id3...)  

8.杀掉进程

alter system kill session 'sid,serial#';  

或批量杀进程

SELECT 'alter system kill session '''||sid||','||serial#||''';' from v$session where sql_id in(sql_id); 

9.分析SQL进行优化

 

 

一、问题描述

运行在Windows上的Oracle开发库的oracle进程CPU使用率保持在99%,服务器和数据库均反应缓慢。

 

二、排查思路

可能造成CPU使用率高的情况有:大量排序、大量SQL解析、全表扫描、Oracle Bug等。因此希望找到占用CPU较高的进程ID(UNIX或LINUX)或线程ID(Windows)来找到对应的SQL语句,以分析问题的原因。

 

三、处理步骤

1. 下载process explorer工具,用于查看Windows环境下的进程和线程信息。

 

 2. 双击oracle.exe进程,查看oracle的线程信息,按照CPU使用率倒序排序,找到占用CPU较高的TID。(如在UNIX或LINUX系统中,使用top命令即可获得占用CPU较高的进程ID,使用进程ID去数据库中查找对应信息即可)

 

 3. 使用上面找到的TID代入下面的SQL查询对应的SQL语句或会话信息。

SELECT sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN (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 =(SELECT addr FROM v$process c WHERE c.spid = '&pid')) ORDER BY piece ASC;  
select id,serial# ,username,osuser,machine,program,process,to_char(logon_time,'yyyy-mm-dd hh24:mi:ss') logon from v$session where paddr in ( select addr from v$process where spid in('&pid'));  

4. kill掉查出的会话,记录查出的SQL语句待后续分析。

 

 

四、总结:

在进行第三步的时候遇到状况:使用找出的TID在数据库中查不到对应的SQL和会话信息。为先恢复数据库服务,直接kill了占用CPU较高的几个线程,后续通过分析AWR和ASH报告推测本次故障与数据库中几个涉及临时表创建和操作的存储过程有关,在存储过程执行中有大量的全表扫描和直接路径读并伴随大量的物理读操作。

posted on   癫狂编程  阅读(2141)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2018-01-14 动态生成lookup字段

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
好的代码像粥一样,都是用时间熬出来的
点击右上角即可分享
微信分享提示