Oracle服务器高CPU占用问题

u010159353 2016-07-12 11:42:17
目前,在数据库服务器发现CPU占用爆表

然后采用了如下的sql去查看当前PID对应的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 = '5389'))ORDER BY piece ASC;
然后发现了如下的sql语句,

然后查看了对应sql相关的程序,其中采用该sql语句插入数据采用的jdbc,然后采用批处理执行,同时插入的数据条数大概为200条,然后怀疑与数据库表数据有关,但是数据库中并没有数据,数据库表也只对主键ID做了索引,对其中ID和另外一列IDC_ID做了为空判断。

同时查看了当前正在执行的sql语句,如下
sql: select a.program, b.spid, c.sql_text,c.SQL_ID from v$session a, v$process b, v$sqlarea c where a.paddr = b.addr
and a.sql_hash_value = c.hash_value and a.username is not null;
结果如下:

其中并没有这条sql语句, 请问各位有什么好的办法去处理这种CPU占用高的问题吗?
备注: 数据库服务器只安装了oracle,没有其它程序!
...全文
1765 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010159353 2016-07-22
  • 打赏
  • 举报
回复
反正就是大概根据PID查找正在执行的sql语句,一般可以定位一些问题,但是也不是特别准确,我大致试了一下,不过后来也是老大解决的,因为根据PID找到的几条sql都不是问题关键,可能CPU占用高之后,执行起来比较卡,正好定位到了。 问题原因是其中一个功能模块采用了调度平台,平台有问题,导致任务执行有bug,占用了cpu。
u010159353 2016-07-14
  • 打赏
  • 举报
回复
现在问题又出现了,我在网上找了相应的根据top中的PID对应的sql语句,查询语句如下

SELECT a.username,
       a.machine,
       a.program,
       a.sid,
       a.serial#,
       a.status,
       c.piece,
       c.sql_text
  FROM v$session a, v$process b, v$sqltext c
 WHERE b.spid = '7589'
   AND b.addr = a.paddr
   AND a.sql_address = c.address(+)
 ORDER BY c.piece;
问下这个对吗? 然后又看见网上有查询当前正在执行的sql,sql语句如下
 select a.program, b.spid, c.sql_text, c.SQL_ID
   from v$session a, v$process b, v$sqlarea c
  where a.paddr = b.addr
    and a.sql_hash_value = c.hash_value
    and a.username is not null;
但是查询到正在执行的sql并没有根据PID查到的sql语句。各位大神,这个到底是咋回事
小灰狼W 2016-07-14
  • 打赏
  • 举报
回复
针对突发的短时间CPU使用高的问题使用AWR不是很准确,如果问题正在发生,可以从操作系统中查看CPU占用高的进程,来找到对应的会话 或者从当前状态为active的会话中查看,重点关注event 如果没来得及在该时段中查看,可以查询v$active_session_history
ghx287524027 2016-07-13
  • 打赏
  • 举报
回复
这是生成 AWR 报告的方法: 方法如下: 1、运行,cmd。然后进入到 oracle的安装目录,这里以我的电脑为例: E:\app\Administrator\product\11.2.0\dbhome_1\ 2、再进入到下面的目录 RDBMS\ADMIN。确保E:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN 下面有 awrrpt.sql这个文件 3、输入 sqlplus ,然后以管理员身份登录。 4、输入命名:@awrrpt 5、开始按提示操作,首先是选择要生成的awr报告的类型,可以选择text或html类型。这里我们以 html类型为例。输入 html,回画 6、选择要生成的报告的日期是在多少天以前记录,输入1,则表示要生成今天0点开始到现在之内的某个时间段的报告,输入2,则表示满意生成昨天0点开始到现在的某个时间段的报告。以此类推。缺省记录最近7天,这里输入法为示例。(10g保存7天,11g保存8天) 7、输入天数后,界面会输出一个时间段的表格,每个时间点都对应一个snapId,间隔时间为oracle默认是1个小时,接下来,输入要生成报告的时间开始点应的snap id,这里我输入3318, 然后再输入结束点对应的snap id,这里输入 3320. 8、接着要求输入生成报告的名字,系统会自动生成一个输入的名字并会提示信息中显示出来。如果使用输入名称。则不用输入任何内容。直接回画即可。到此。系统就会自动生成一张awr的报告。
卖水果的net 2016-07-13
  • 打赏
  • 举报
回复
打印个 AWR 报告吧,那个比较清楚;
u010159353 2016-07-13
  • 打赏
  • 举报
回复
目前,根据现有的高占用CPU的PID,已经做了处理,现在单个PID占用的CPU对应的都没有超过40%,但是总体的CPU占用还是挺高的。 不过根据相应的awr报告,请教一下各位的是,看这几个参数对应的sql语句
,应该就可以看出对应的占用信息吧!
u010159353 2016-07-12
  • 打赏
  • 举报
回复
如果不采取这种方式处理,那有什么好的方法定位这个问题了? 因为我不是很确定我通过PID查询执行的sql语句是否是真的, 因为正在执行的sql语句里面,没有我根据PID查询到的sql
js14982 2016-07-12
  • 打赏
  • 举报
回复
啥意思? 单纯的想杀掉这个进程?
kill -9 pid

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧