Centos7中Oracle占用CPU过高(解决方案)
Centos7中Oracle占用CPU过高(解决方案)
前言:
99%的问题几乎都是SQL的问题,一般SQL可能会出现以下几种情况:
- 相关SQL搜索条件没有加索引
- 索引失效
- 联合查询过多
- 数据量过大
分析及解决
一般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
无论风雨,和自己一决胜负吧