oracle的cpu满了怎么办,Oracle服务器CUP爆满问题排查和紧急处理方案

关于oracle服务器cpu爆满,从而导致程序运行缓慢,甚至直接白屏,各类连接超时,在生产环境中必须快速排查定位和紧急处理。

希望下面的处理步骤能够帮到大家。

1. 服务器中使用 top 命令观察当前服务器各项指标使用情况, 通过下面sql耗费CPU大的sql语句是哪些

select a.username,a.command,a.status,a.program,a.machine,a.client_identifier,b.sql_text,b.cpu_time,b.sharable_mem,

round((b.disk_reads + b.buffer_gets) / b.executions) as resource_cost

from v$session a, v$sqlstats b

where a.sql_id = b.sql_id

and b.executions > 0

and a.wait_class <> 'idle'

order by resource_cost desc;

2. 快速查询正在运行的慢sql语句,从而定位到程序中具体哪些sql语句有问题(比如程序中带条件的sql,当请求参数不满足某个条件时,sql条件也不会带上,最后造成无条件sql的全表扫描)

select *

from (select sa.SQL_TEXT,

sa.SQL_FULLTEXT,

sa.EXECUTIONS "执行次数",

round(sa.ELAPSED_TIME / 1000000, 2) "总执行时间",

round(sa.ELAPSED_TIME / 1000000 / sa.EXECUTIONS, 2) "平均执行时间",

sa.COMMAND_TYPE,

sa.PARSING_USER_ID "用户ID",

u.username "用户名",

sa.HASH_VALUE

from v$sqlarea sa

left join all_users u

on sa.PARSING_USER_ID = u.user_id

where sa.EXECUTIONS > 0

order by (sa.ELAPSED_TIME / sa.EXECUTIONS) desc)

where rownum <= 50;

到此分析上面1  2  执行后的结果,导出excel来具体分析优化代码或者sql即可。但是优化需要时间,必须再进行下面的操作,让数据库快速恢复正常.

3.  查询正在执行中的select会话(用处是把查询出来的select会话手动杀掉,从而是CPU快速下降-只针对查询)

select v$session.SID,

v$session.SERIAL#,

v$session.MACHINE,

v$sqlarea.SQL_FULLTEXT,

v$sqlarea.SQL_TEXT,

'alter system kill session ' || '''' || v$session.SID || ',' || v$session.SERIAL# ||

''' immediate;'

from v$sqlarea, v$session

where v$sqlarea.ADDRESS = v$session.SQL_ADDRESS

and v$sqlarea.HASH_VALUE = v$session.SQL_HASH_VALUE

and v$session.STATUS = 'ACTIVE'

--and v$session.PROGRAM = 'JDBC Thin Client'

and UPPER(v$sqlarea.SQL_TEXT) like 'SELECT %';

上面sql查询后,最后一列 已经拼接好了杀掉select连接的sql,  通过PL/SQL  命令执行窗口全部执行即可。 例如:   alter system kill session '1152,59673';

标签:CUP,SQL,爆满,session,sql,Oracle,sqlarea,sa,select

来源: https://blog.csdn.net/winy_lm/article/details/115009669

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库服务器存储空间爆满时,您可以采取以下措施来解决问题: 1. 清理日志文件:检查数据库日志文件所在的路径,例如在 $ORACLE_HOME/rdbms/audit 目录下。可以删除旧的、不再需要的日志文件。 2. 清理归档日志文件:如果数据库启用了归档模式,检查归档日志文件所在的路径,例如在 $ORACLE_HOME/dbs/arch 目录下。可以删除旧的、不再需要的归档日志文件。 3. 压缩表空间:对于较大的表空间,可以考虑使用 Oracle 提供的压缩功能来减小占用空间。具体操作可以参考 Oracle 文档中关于表空间压缩的说明。 4. 清理临时表空间:检查临时表空间的使用情况,可以使用以下 SQL 查询语句查看每个临时表空间的使用情况: ```sql SELECT tablespace_name, SUM(bytes)/1024/1024 AS "Used (MB)", SUM(maxbytes)/1024/1024 AS "Max (MB)" FROM dba_temp_files GROUP BY tablespace_name; ``` 如果某个临时表空间已经使用了大量空间,可以考虑清理或重新配置该表空间。 5. 删除不必要的数据:检查数据库中是否有不再需要的数据,例如旧的日志记录、过期的备份等。可以根据业务需求和数据保留策略来删除这些数据。 6. 扩容磁盘空间:如果以上方法无法解决问题,可以考虑增加数据库服务器的磁盘空间。这可能需要对磁盘进行扩容或添加新的存储设备。 请根据您的具体情况选择适合的解决方法,并在执行任何更改之前务必备份重要的数据库数据。如果您需要更详细的指导,请提供更多关于数据库版本和具体情况的信息,以便我能够提供更准确的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值