oracle占用了99%-100%的CPU,怎样分析原因?

xiaojiyi 2003-09-09 03:09:54
系统的用户数至多不会超过30个,系统配置为
内存:1G
CPU:p3
三个scsi硬盘做RAID5
SGA配置:db_block_buffers 500M
shared_pool_size100M
large_pool_size 50M

今天早上突然发现有时候ORACLE会占用了CPU的99%~100%,这时系统特别慢.
我刚刚接触ORACLE,还是个菜鸟级的人物,而且系统不是我编写的,我也不知道哪些操作会比较耗CPU.想请问各位大侠可以从哪些方面查找原因,例如:怎样看当前哪个用户进程占用了大部分CPU?他们正在运行哪个语句?这样用户是谁?等等

...全文
524 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
minkoming 2003-09-09
  • 打赏
  • 举报
回复
看看数据库是否有JOB在后台运行什么存储过程,这个东西很耗费CPU的。
xiaojiyi 2003-09-09
  • 打赏
  • 举报
回复
to l2g32003(leeshow) :

我执行了select s.sid,s.value "CPU Used"
from v$sesstat s,v$statname n
where s.statistic#=n.statistic# and n.name='CPU used by this session'
and s.value>0
order by 2 desc;
结果返回0行.
我想我的timed_statistics应该是false 的了?time_statistics是个什么东西?在哪里看?应该怎样修改它?修改了它,对系统有没有什么影响?
xiaojiyi 2003-09-09
  • 打赏
  • 举报
回复
哪要怎样进行审计,又怎样查看结果?

还有,我通过
select machine,program from v$session where status='ACTIVE'查看了当前有哪些进程之后,怎样知道这些进程分别占用了多少CPU?
l2g32003 2003-09-09
  • 打赏
  • 举报
回复
select s.sid,s.value "CPU Used"
from v$sesstat s,v$statname n
where s.statistic#=n.statistic# and n.name='CPU used by this session'
and s.value>0
order by 2 desc;

能知道哪个sid最消耗资源 前提,timed_statistics=true
Drate 2003-09-09
  • 打赏
  • 举报
回复
Oracle的审计机制是用来监视用户对ORACLE数据库所做的各种操作。在缺省情况下,系统的审计功能是关闭的。激活的办法是,在INIT.ORA参数文件中,将参数AUDIT_TRAIL设置为正整数。

  审计功能激活后,任何拥有表或视图的用户就可以进行如下审计操作:

  ·使用SQL语句来挑选审计选择项;

  ·审计对该用户所拥有的表或视图的成功或不成功的存取企图;

  ·有选择的审计各种类型的SQL操作(SELECT、UPDATE、INSERT、DELETE);

  ·控制审计的程度(是以SESSION还是ACCESS为单位)。

  另外,对于DBA用户还可以以下审计功能:

  ·对成功的LOGON、LOGOFF、GRANT、REVOKE进行审计;

  ·允许或禁止向审计追踪表寄数据;

  ·为某些数据库表设定缺省选择项。
Drate 2003-09-09
  • 打赏
  • 举报
回复
在SQL PLUS用下面的语句查一下你有哪些用户在使用你的ORACLE
select machine,program from v$session

10 服务器监控 使用命令来显示 Unix 服务器的高 CPU 资源占用会话。top 显示每个 CPU 的使用情况。 top 的输出分两部分。第一部分显示每个处理器的负载情况,第二部分显示使用 CPU 最多的会话信息。 # top load averages: 0.23, 0.53, 0.49 64 processes: 1 running, 21 sleeping, 42 idle CPU states: 7.5% user, 0.0% nice, 2.9% system, 89.4% idle Memory: Real: 772M/991M act/tot Virtual: 1965M use/tot Free: 15M PID USERNAME PRI NICE SIZE RES STATE TIME CPU COMMAND 837 afis 42 0 34M 29M sleep 128:39 11.70% unixsvr 824 afis 44 0 10M 1826K sleep 26:40 0.70% dtterm 5121 oracle 42 0 435M 15M sleep 0:01 0.60% oracle 717 root 44 0 10M 4358K sleep 13:43 0.30% Xdec 5120 root 44 0 5832K 3203K run 0:00 0.10% top 558 root 44 0 3640K 180K sleep 34:13 0.00% os_mibs 715 root 42 0 18M 11M sleep 0:02 0.00% smsd 775 afis 44 0 11M 1843K sleep 0:01 0.00% dtsession 5117 afis 54 10 8248K 565K sleep 0:00 0.00% dtscreen 5097 oracle 44 0 423M 3465K sleep 0:00 0.00% oracle 5101 oracle 44 0 427M 2793K sleep 0:00 0.00% oracle 5105 oracle 44 0 421M 2621K sleep 0:00 0.00% oracle 5103 oracle 44 0 421M 2138K sleep 0:00 0.00% oracle 562 root 44 0 2960K 851K sleep 0:00 0.00% cpq_mibs 5055 root 44 0 1936K 303K sleep 0:00 0.00% telnetd 作为一个 DBA 应该关心的内容有: Load averages:平均负载。如果大于 1 说明服务器负荷过重。 CPU states:CPU 信息概要。7.5% user 的意思是 CPU 有 7.5%是用户占用,其他 可按字面类推。 Memory:Free 表明可用的内存数量。本例子中可用内存是 15M。 IDLE:CPU 空闲百分比 2. 使用 sar sar 在 SVR4 环境中,例如 HP-UX、Solaris 中很普及,在 aix 中也可以用。Sar 命 令可以查看整体 CPU 消耗情况,磁盘、内存、JFS buffer 使用情况等。常见的 sar 使用 例子: sar -u 显示 CPU 活动情况。例如: # sar -u 2 5 AIX TSXJ 2 5 0052E51D4C00 10/09/06 System Configuration: lcpu=2 16:12:10 %usr %sys %wio %idle 16:12:12 100 0 0 0 16:12:14 99 1 0 0 16:12:16 99 0 0 0 16:12:18 41 1 26 31 16:12:20 46 1 0 53 Average 77 1 5 17 上面的命令每 2 秒显示一次 cpu 情况,显示 5 次。 sar -w 显示交换(swapping)活动。例如 5 秒钟显示一次,显示 5 次: # sar -w 5 5 HP-UX corp-hp1 B.11.00 U 9000/800 08/09/00 19:37:57 swpin/s bswin/s swpot/s bswot/s pswch/s 19:38:02 0.00 0.0 0.00 19:38:07 0.00 0.0 0.00 … 0.0 222 0.0 314 Average 0.00 0.0 0.00 0.0 294 上面的输出列的含义: swpin/s 每秒钟交换进(sawp-in)的进程数量 swpot/s 每秒钟交换出(sawp-out)的进程数量 bswin/s 每秒钟交换进的块数(每块512字节) bswot/s 每秒钟交换出的块数(每块512字节) pswch/s 每秒钟上下文交换数量 sar -b 显示 buffer 活动情况 # sar -b 1 6 HP-UX corp-hp1 B.11.00 U 9000/800 08/09/00 19:44:53 lread/s %rcache bwrit/s lwrit/s... 19:44:54 91 100 9 19... 19:44:55 0 0 0 5... 19:44:56 6 100 9 8... 19:44:57 30 100 9 20... 19:44:58 1 100 0 3... 19:44:59 1 100 9 4... Average 22 100 6 10... %wcache pread/s pwrit/s... 53 0 0... 100 0 0... 0 0 0... 55 0 0... 100 0 0... 0 0 0... 39 0 0... 各个列的含义: lread/s Number of reads per second from the Unix JFS buffer cache %rcache Buffer cache hit ratio (for the Unix JFS buffer cache) for read requests bwrit/s Number of physical writes to disk per second lwrit/s Number of writes per second to the Unix JFS buffer cache %wcache Buffer cache hit ratio (for the Unix JFS buffer cache) for write requests pread/s Number of reads per second from disk pwrit/s Number of writes per second to disk 3. 使用 vmstat vmstat 是通用的 UNIX 监控工具,vmstat 在 IRIX 操作系统中是 osview。vmstat 的 第一个参数是间隔的秒数,也可以带第二个参数,表明显示多少次。vmstat 不同操 作系统输出结果不一样,含义也可能有区别,具体要看 man 帮助。 # vmstat 3 kthr memory cpu ---- ... --------------- ... -------------- r b ... fre re pi sr ... cs us sy id wa 0 0 ... 207 0 1 0 ... 142 18 4 75 4 0 0 ... 187 0 4 0 ... 70 2 1 91 6 0 0 ... 184 0 0 0 ... 99 5 2 89 4 0 0 ... 165 0 0 0 ... 98 1 8 52 40 0 0 ... 150 0 3 0 ... 136 4 2 87 6 0 0 ... 141 0 1 0 ... 192 5 0 91 4 在 HP-UX 或 AIX 下 vmstat 输出中一些重要的信息: r 运行队列。当这个值超过CPU数量的时候,服务器就有CPU瓶颈(可以通 过lsdev -C|grep Process|wc -l 来获取CPU数量) pi page-in数量。这个参数非0暗示着系统缺少内存,内存被交换到磁盘。然而 当程序刚使用的时候也可能导致page-in非0。为了找到真正原因,则检查sr 列。如果sr也是非0,那么的确意味着缺少内存。 sr 扫描速率。如果扫描速率持续增加,那么页交换后台程序忙于分配内存页。 下面是CPU的一些信息: us 用户占用CPU的百分比 sy 系统占用CPU的百分比 id 空闲CPU百分比 wa 等待CPU的百分比 用户和系统百分比之和(us+sy)接近 100 时,说明 CPU 繁忙,但并不意味着 CPU 过载。sr 超过 CPU 数量的时候意味着 CPU 过载。当 CPU 等待(wa)超过 20 的时候,那么 20%或者更多的处理 时间在等待资源,通常是 I/O。通常在备份或者导出等 I/O 操作的时候这个百分比比较大;但如 果正常的时候这个值一直挺高则也可能有 I/O 瓶颈。 4. AIX 下显示交换区(Swap)使用情况 lsps -a 可用来显示交换使用情况。之前我们讨论过,Oracle 数据库在消耗过多的 服务器内存的时候有可能产生很多交换,而 PGA 的内存需求引起内存移动到交换盘 的操作。 # lsps -a Page Space Physical Volume Volume Group Size %Used Active Auto Type hd6 hdisk0 rootvg 512MB 1 yes yes lv 上面%Used 是 1,说明有 1%的交换。 5. 显示 HP-UX 下的交换区使用情况 # swapinfo -tam Mb Mb Mb... TYPE AVAIL USED FREE... dev 1024 25 999... reserve – 999 -999... memory 3966 3547 419... total 4990 4571 419... ... PCT Mb ... USED RESERVE PRI NAME ... 2% 1 /dev/vg00/lvol2 ... ... 89% ... 92% 0 - 6. 显示服务器平均负载情况(w 命令)。 Unix 的 w 命令用来显示高资源会话简单的信息。大多数的有经验的 Oracle DBA 都会 首先用这个命令来快速查看一下服务器负载情况,因为 w 命令在几乎所有的 Unix 下 都可以用。 # w 10:02AM up 60 days, 18:46, 3 users, load average: 0.32, 0.39, 0.43 User tty login@ idle JCPU PCPU what Oracle pts/0 08:17AM 0 80:18 80:16 w oracle pts/1 09:15AM 5 2 0 ftp miltonrv pts/2 01May 009days 0 0 -ksh 上面的输出中的 load average 分别是过去 1 分钟、5 分钟、15 分钟的负载情况。如 果大于 1 说明 CPU 紧张。 7. 使用 iostat iostat 显示物理磁盘 I/O 情况。下面的 3 表明 3 秒钟显示一次。 # iostat 3 System configuration: lcpu=2 disk=5 tty: tin tout avg-cpu: % user % sys % idle % iowait 0.0 1302.0 1.8 0.6 89.3 8.3 Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk0 0.4 2.8 0.7 15919 15112048 dac0 0.0 0.8 0.2 643384 3730076 dac0-utm 0.0 0.0 0.0 0 0 hdisk1 0.0 0.8 0.2 643384 3730076 cd0 0.0 0.0 0.0 0 0 tty: tin tout avg-cpu: % user % sys % idle % iowait 0.3 3176.3 0.7 1.8 64.3 33.2 Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk0 71.0 501.3 123.7 0 1504 dac0 0.0 0.0 0.0 0 0 dac0-utm 0.0 0.0 0.0 0 0 hdisk1 0.0 0.0 0.0 0 0 cd0 0.0 0.0 0.0 0 0 上面比较重要的列: Kb_read:过去的时间区间内读取得 K 字节数。(第一个显示的是历史总计,因此要看变 化情况,应该看其它的时间区间。) Kb_wrtn: 过去的时间区间内写入得 K 字节数。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧