Centos7中Oracle占用CPU过高(解决方案)

Centos7中Oracle占用CPU过高(解决方案)

前言:

99%的问题几乎都是SQL的问题,一般SQL可能会出现以下几种情况:

  1. 相关SQL搜索条件没有加索引
  2. 索引失效
  3. 联合查询过多
  4. 数据量过大

分析及解决

一般cpu占用效高都是排序、sql解析和全表扫描,这里首先需要找出占用cpu最高的sql,然后查看他的执行计划,比如:看执行计划是走索引还是全表扫描(刚开始查看top发现占用同样多的CPU的进程很多,还以为是oracle 的bug, 后来发现不是)。

使用Linux系统 "top命令->P "查出占用cpu最高的进程PID

使用以下SQL通过Oracle进程号ID进行分析占用CPU最高的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

其中&pid 是使用top 查看系统中进程占用CPU极高的PID
找到SQL语句进行相应的调整优化

分析找到的sql语句,如查看sql执行计划(EXPLAIN PLAN FOR)。

具体解析查看SQL使用详情:https://www.cnblogs.com/lijiaman/p/11488979.html

posted @ 2022-02-07 16:08  阿尔法哲  阅读(622)  评论(0编辑  收藏  举报