Linux操作系统层面cpu使用率过高以及排查过程

本文介绍了一种排查Oracle数据库服务器CPU占用率过高的方法。首先通过top命令查看占用CPU较高的Oracle进程,然后利用ps命令获取这些进程的具体信息,最后通过sqlplus工具查询导致CPU占用率高的具体SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)查看服务器CPU使用情况
输入top
会发现排在前面的都是oracle的进程,而且CPU占用率都是50以上。
$ top
top - 16:28:41 up 4 days, 22:35, 1 user, load average: 21.49, 22.14, 22.05
Tasks: 299 total, 31 running, 268 sleeping, 0 stopped, 0 zombie
Cpu(s): 79.2%us, 1.5%sy, 0.0%ni, 18.4%id, 0.8%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 7793040k total, 7659492k used, 133548k free, 165424k buffers
Swap: 10223608k total, 763068k used, 9460540k free, 4435980k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29533 oracle 17 0 3291m 36m 26m R 98.9 0.5 98:36.33 oracle
7825 oracle 17 0 3285m 30m 25m R 97.0 0.4 267:59.25 oracle
13527 oracle 17 0 3291m 36m 26m R 97.0 0.5 362:08.86 oracle
32000 oracle 17 0 3291m 36m 26m R 95.1 0.5 198:58.18 oracle

查出进程的作用

ps -ef|grep 29533

oracle 29533 1 0 15:25 ? 00:00:00 oracleecom (LOCAL=NO)
root 2223 2177 0 16:36 pts/3 00:00:00 grep 29533

ps -ef|grep 7825

oracle 7825 1 0 15:25 ? 00:00:00 oracleecom (LOCAL=NO)
root 2224 2176 0 16:38 pts/3 00:00:00 grep 7825

ps -ef|grep 13527

oracle 13527 1 0 15:25 ? 00:00:00 oracleecom (LOCAL=NO)
root 2225 2175 0 16:40 pts/3 00:00:00 grep 13527

ps -ef|grep 32000

oracle 32000 1 0 15:25 ? 00:00:00 oracleecom (LOCAL=NO)
root 2226 2170 0 16:42 pts/3 00:00:00 grep 32000

是用来做oracle连接的。

2)查出导致慢的原因

查进程执行的是什么语句

sqlplus / as sysdba

SELECT
sql_text
FROM vsqltextaWHERE(a.hashvalue,a.address)IN(SELECTDECODE(sqlhashvalue,0,prevhashvalue,sqlhashvalue),DECODE(sqlhashvalue,0,prevsqladdr,sqladdress)FROMvsqltextaWHERE(a.hashvalue,a.address)IN(SELECTDECODE(sqlhashvalue,0,prevhashvalue,sqlhashvalue),DECODE(sqlhashvalue,0,prevsqladdr,sqladdress)FROMvsession b
WHERE b.paddr =
(SELECT addr FROM v$process c WHERE c.spid = ‘&pid’))
ORDER BY piece ASC

输入上面的进程ID:29533

SELECT TO_CHAR(current_timestamp AT TIME ZONE ‘GMT’, ‘YYYY-MM-DD
HH24:MI:SS TZD’) AS curr_timestamp, COUNT(db_user) AS failed_co
unt FROM sys.dba_common_audit_trail WHERE action BETWEEN 100 AND
102 AND returncode != 0 AND TO_CHAR(extended_timestamp, ‘YYYY-M
M-DD HH24:MI:SS’) >= TO_CHAR(current_timestamp - TO_DSINTERVAL(’
0 0:30:00’), ‘YYYY-MM-DD HH24:MI:SS’)

发现,每个进程ID都是执行这条语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值