Oracle 性能监控(OPMon)
<script type="text/javascript">
</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
STATSPACK是很有用的性能调整工具,提供了性能调整的很多有用信息,如:综合负荷信息, 前5名等待事件,按逻辑读或物理读排序的SQL语句. 在使用过程中我发现它两次收集的时间间隔不能太短, 否则会在数据库上产生较大的负荷,并且在数据库主机负荷较高时, 收集和生成报告的时间都比较长. 为了能在更短的时间内取得有效数据,以便更快解决问题,我编写了这个工具, 能更快高效地提供与STATSPACK差不多的主要信息用于性能调整. 在输出的报告中包括了综合负荷,前5位等待事件,前5位LATCH,和按执行次数/逻辑读/物理读/CPU时间(9i以上)/等待时间(9i以上)降序排列的SQL HASH值. 整个报告显得简要明朗.
我相信这个工具和STATSPACK具有同等作用. 有时因为Oracle的一些bug,我们可能会经常FLUSH内存中的东西, 这种情况下这个工具还是可以使用的,因为它可以在很短的时间内(如30秒或1分钟)找出这些信息.
1, 免费下载
2, 安装与使用
OPMon是一个非常有用的小工具, 要使用你必须安装Oracle客户端或服务端软件, 如果你需要连接到远程数据,还需要配置Oracle的客户端, 使用"-U"选项指定要连接的用户名, 程序会提示输入口令, 请给这个用户CREATE SESSION和SELECT_CATALOG_ROLE角色权限.
C:/MYDUL/dulsrc>opmon -h下面是一个连接的例子:
AnySQL OPMon for Oracle, Release 2.0.0
(c) Copyright Lou Fangxin 2004/2005, all rights reserved.
Usage: opmon -[option][value]
-H print help message
-U Oracle user name with select_catalog_role.
-S tns alias if remote database.
-T time interval (default 30 seconds, min 5, max 900)
-C number of top SQLs displayed (min 5, max 16384)
-Q run in quiet mode, write to file
-D directory of output file in quiet mode
在SQL*Plus中连接数据库如下
SQL> conn test/test@test
Connected.
SQL> exit
则用opmon时在命令行输入,提示密码时输入密码然后回车:
C:/>opmon -uanysql -sprod
Password:******
3, 输出报告
第一部份是综合信息.
AnySQL OPMon (Host:*****, SID:*****, CPU:4, Time:23:01:22 - 23:03:26, Elapse:124)第二部分是前5位等待事件.
-Statistics (Per Second Value)------------------------------------------------------------------
0 logon 20 open cursors 441 user commits 0 user rollback
2399 user calls 264 CPU time 0 enqueue waits 12K db block gets
8605 consistent get 2009 physical reads 7113 DB blk Changes 271 physical write
0 DBWR buf scan 115 free buf req 0 Dirty buf ins 0 free buf ins
0 CR blk created 1918 Direct reads 2 Direct write 0 LOB phy read
0 LOB phy write 1196K redo size 2672 redo blk write 0 table direct
94K table scan 1590 table by rowid 14 Leaf Split 2 Leaf 9/1 Split
18 Total parse 0 Hard parse 1820 execute count 490K bytes SQL*Net
43 sort memory 0 sort disk
-Waits----W/S---Time--Tim/S--Pct----Event-------------(Top 5 Wait Event)------------------------第三部份是前5位LATCH
0 0 31K 254 28 CPU time
67K 541 26K 215 23 db file scattered read
80 0 24K 194 21 enqueue
43K 346 16K 136 15 db file sequential read
27K 223 12K 102 11 buffer busy waits
-Get/S--Mis/S--Slp/S-IGet/S-IMis/s-SGet/S--Latch------------------------------(Top Latch)-------第四部份是按执行次数/逻辑读/物理读等排序SQL信息
18K 980 17 0 0 963 library cache
5851 143 0 0 0 143 row cache objects
7748 74 1 0 0 72 shared pool
9475 35 1 0 0 34 library cache pin
6248 26 0 0 0 26 library cache pin allocation
--Exec--Exe/S--Get/S--Get/E--Dsk/S--Dsk/E--Row/E---Sort--Cpu/S-Wait/S--HASH---(Order By Exec)---在SQL信息中有很多列,这儿作一个简单的介绍:
428 85 1942 22 7 0 1 0 0 0 265680535 [EXEC 1]
375 75 1779 23 9 0 1 0 0 0 3580731310 [EXEC 2]
369 73 1754 23 8 0 1 0 0 0 3128756925 [EXEC 3]
301 60 1423 23 8 0 1 0 0 0 655541777 [EXEC 4]
283 56 1355 23 5 0 1 0 0 0 3460144907 [EXEC 5]
--Exec--Exe/S--Get/S--Get/E--Dsk/S--Dsk/E--Row/E---Sort--Cpu/S-Wait/S--HASH---(Order By Gets)---
1 0 8416 42K 0 0 61K 1 0 0 1860160018 [GETS 1]
1 0 6958 34K 0 0 50K 0 0 0 3677268534 [GETS 2]
1 0 4269 21K 0 0 8403 1 0 0 3314942495 [GETS 3]
2 0 2728 6822 0 0 1 2 0 0 3657573887 [GETS 4]
1 0 2168 10K 0 0 8403 0 0 0 2269343600 [GETS 5]
428 85 1942 22 7 0 1 0 0 0 265680535 [GETS 6]
375 75 1779 23 9 0 1 0 0 0 3580731310 [GETS 7]
369 73 1754 23 8 0 1 0 0 0 3128756925 [GETS 8]
--Exec--Exe/S--Get/S--Get/E--Dsk/S--Dsk/E--Row/E---Sort--Cpu/S-Wait/S--HASH---(Order By Disk)---
375 75 1779 23 9 0 1 0 0 0 3580731310 [DISK 1]
301 60 1423 23 8 0 1 0 0 0 655541777 [DISK 2]
369 73 1754 23 8 0 1 0 0 0 3128756925 [DISK 3]
87 17 258 14 8 0 3 0 0 0 2504395356 [DISK 4]
428 85 1942 22 7 0 1 0 0 0 265680535 [DISK 5]
92 18 280 15 7 0 2 0 0 0 492167313 [DISK 6]
63 12 203 16 6 0 3 0 0 0 1787408523 [DISK 7]
157 31 125 3 6 0 0 0 0 0 2732246224 [DISK 8]
Exec : 在这段时间内的总执行次数所有这些值为一个时间段的差值. 你可以在这儿找到很多有用的信息, 我曾通过不同时间相同SQL的Row/E这一列的值不同发现了数据分布的问题,找出了某一个值上有很多无用记录从而解决问题.
Exe/S : 平均每秒执行次数
Get/S : 平均每秒的逻辑读
Get/E : 平均每次执行的逻辑读
Dsk/S : 平均每秒的物理读
Dsk/E : 平均每次执行的物理读
Row/E : 每次执行返回的记录数
Sort : 在这段时间内的排序次数
Cpu/S : 平均每秒占用的CPU时间(毫秒)
Wait/S : 平均每秒占用的CPU时间(毫秒,为总时间减去CPU时间)
4, 备注
OPMon是一个轻量级的工具,不会对服务器的负荷造成过重影响.