为啥每个oracle进程占用如此高的内存

为啥每个oracle进程占用如此高的内存,第1张

因为oracle在数据库启动后的主要 *** 作就是后台进程的工作,将近四百多个后台进程就像沸腾的水一样在内存中工作,并且在oracle服务启动后,sga和pga也是占用内存的一个较大原因,他们为数据的处理和每个会话server提供内存块

问题分析:

一般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执行计划。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6718961.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存