众所周知,使用 top 实用程序分析数据库服务器的性能非常方便。下面是部分 top 输出。
20:51:14 up 11 days, 23:55, 4 users, load average: 0.88, 0.39, 0.27
113 processes: 110 sleeping, 2 running, 1 zombie, 0 stopped
CPU states: cpu user nice system irq softirq iowait idle
total 1.0% 0.0% 5.6% 2.2% 0.0% 91.2% 0.0%
Mem: 1026912k av, 1008832k used, 18080k free, 0k shrd, 30064k buff
771512k actv, 141348k in_d, 13308k in_c
Swap: 2041192k av, 66776k used, 1974416k free 812652k cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
16143 oracle 15 0 39280 32M 26608 D 4.0 3.2 0:02 0 oraclePRODB2...
5 root 15 0 0 0 0 SW 1.6 0.0 0:33 0 kswapd
... output snipped ...
我们来仔细分析此输出。首先,您需要注意 CPU states 下面的 "idle" 列;该列为 0.0%,这意味着 CPU 被完全占用来执行某项任务。问题是 CPU 在做什么?将注意力转向 "system" 列,就在左侧不远处;该列显示 5.6%。这说明,系统本身占用的 CPU 并不多。再向左就是 "user" 列,该列显示 1.0%。由于用户进程还包括 Oracle,因此 Oracle 并未占用 CPU 周期。那么,到底是什么占用了整个 CPU?
答案就在同一行右侧 "iowait" 列下面,该列为 91.2%。一切都明白了:91.2% 的 CPU 时间都在等待 IO。
为什么会有这么多的 IO 等待?答案在显示内容中。注意最消耗资源的进程的 PID:16143 您可以使用以下查询来确定该进程在做什么:
select s.sid, s.username, s.program
from v$session s, v$process p
where spid = 16143
and p.addr = s.paddr
/
SID USERNAME PROGRAM
------------------- -----------------------------
159 SYS rman@prolin2 (TNS V1-V3)
rman 进程在进行与 CPU 周期相关的 IO 等待。该信息可以帮助您确定接下来的操作流程。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11782778/viewspace-616761/ ,如需转载,请注明出处,否则将追究法律责任。