Oracle内存和CPU占用率极高,是什么问题
答案:2 悬赏:70 手机版
解决时间 2021-04-14 20:36
- 提问者网友:雨不眠的下
- 2021-04-14 14:46
Oracle内存和CPU占用率极高,是什么问题
最佳答案
- 五星知识达人网友:怀裏藏嬌
- 2021-04-14 15:53
问题分析:
一般cpu占用效高都是排序、sql解析和全表扫描,这里首先需要找出占用cpu最高的sql,然后查看他的执行计划,比如:看执行计划是走索引还是全表扫描(刚开始查看top发现占用同样多的CPU的进程很多,还以为是oracle 的bug, 后来发现不是)。
处理过程:
1, 根据操作系统进程查找Oracle数据库中占用最多CPU的SQL
使用Linux系统 "top命令->P "查出占用cpu最高的进程PID
操作如下:在sqlplus中执行如下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
其中&pid 是使用top 查看系统中进程占用CPU极高的PID
找到SQL语句进行相应的调整优化
2,分析找到的sql语句,如查看sql执行计划。
一般cpu占用效高都是排序、sql解析和全表扫描,这里首先需要找出占用cpu最高的sql,然后查看他的执行计划,比如:看执行计划是走索引还是全表扫描(刚开始查看top发现占用同样多的CPU的进程很多,还以为是oracle 的bug, 后来发现不是)。
处理过程:
1, 根据操作系统进程查找Oracle数据库中占用最多CPU的SQL
使用Linux系统 "top命令->P "查出占用cpu最高的进程PID
操作如下:在sqlplus中执行如下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
其中&pid 是使用top 查看系统中进程占用CPU极高的PID
找到SQL语句进行相应的调整优化
2,分析找到的sql语句,如查看sql执行计划。
全部回答
- 1楼网友:思契十里
- 2021-04-14 16:59
你好!
1、优化SQL语句; 2、数据分批处理; 3、数据分不同时间段处理; 4、加内存条。
仅代表个人观点,不喜勿喷,谢谢。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯