我们可以从http://technet.microsoft.com/en-us/sysinternals下载到Windows平台上的系统内部调试工具包,这些工具中大部分是由Mark Russinovich编写的,其中最为著名的tools包括进程管探测器(Process Explorer)、Regmon等。
这里我们要介绍的是使用Procexp工具监控Windows平台上的Oracle性能信息。Procexp是一套功能齐全的进程信息管理工具,它使用图形界面显示(GUI),可以把它看做是Windows平台上taskmgr.exe任务管理器的扩展,事实上它完全足以代替taskmgr,前提是用户需要有一定的OS基础。
我们来看看Procexp针对运行在Windows上的Oracle(一种不太推荐的组合)时所能监控的信息:
1.进程属性
- 包括进程的性能数据,包括CPU、Virtual Memory、Physical Memory、I/O、Handles
- 查看详细的线程信息(包括个别线程的CPU使用率)
- 查看线程堆栈(thread stack)
- Kill/suspend thread
2.系统全局信息
- 提供系统级别的性能数据
3.创建进程的DUMP文件
- 创建FULL或minidump转储以便诊断BUG
4.识别文件句柄(Handle)或动态链接库(DDL)
- 可以用来判断进程锁住了那些DDL文件或普通文件句柄
当我们在Windows上成功启动Oracle实例后就可以通过Procexp.exe工具来监控数据库性能了,使用十分简便,选中”Oracle.exe”进程之后右键菜单Properties即可浏览进程的属性:
选中Performance面板后可以浏览进程的性能数据,这就像是Windows上的nmon命令,注意要使用管理员身份运行Procexp.exe,否则可能性能数据无法正确收集而显示N/A:
选中Performance Graphy面板浏览图形化的性能趋势图:
点击Thread面板我们可以浏览Oracle.exe进程下的线程信息,Windows平台上的一点不便就是无法通过线程信息直接判断该线程是哪个”后台进程”或”服务进程”,需要配合v$process视图才能做到。
SQL> select spid ,program from v$process; SPID PROGRAM ------------------------ -------------------- PSEUDO 3124 ORACLE.EXE (PMON) 4328 ORACLE.EXE (VKTM) 5096 ORACLE.EXE (GEN0) 2840 ORACLE.EXE (DIAG) 2068 ORACLE.EXE (DBRM) 2464 ORACLE.EXE (PSP0) 4468 ORACLE.EXE (DIA0) 120 ORACLE.EXE (MMAN) 4424 ORACLE.EXE (DBW0) 1312 ORACLE.EXE (LGWR) 684 ORACLE.EXE (CKPT) 5684 ORACLE.EXE (SMON) 1016 ORACLE.EXE (RECO) 4516 ORACLE.EXE (MMON) 1108 ORACLE.EXE (MMNL) 6108 ORACLE.EXE (NSS2) 2728 ORACLE.EXE (SHAD) 18 rows selected.
以上SPID=3124即指TID为3124的线程为PMON”后台进程”,在Thread面板上能够直接了解到某个线程的CPU使用率,这在我们诊断Oracle.exe进程有过高的CPU使用率时可以方便定位;点击stack按钮可以调出该线程当前的调用栈,这在我们确定BUG的时候很有用。
同时在以上Thread面板上还可以使用Kill/Suspend按钮来杀死或停止某个异常线程(前提是我们确认所要杀死的线程是非关键后台的non-critical background thread),在Windows平台上这原本是需要使用orakill命令来完成的。
TCP/IP面板可以为我们提供简要的进程网络信息,包括Local Address和Remote Address,如果要获取更完整的信息可以配合其他网络监控工具(如工具包中的TCPView):
另一个十分有用的功能是Environment面板,该面板用以显示详细的环境变量信息,如:Path,TEMP,ORACLE_SID,CLASSPATH等等,在诊断一些本地登录问题或实例异常问题时十分有效:
Procexp工具也能像taskmgr那样监控系统级的性能信息,而且更为详细,点击主面板上的View -> System Information:
如上文所述View DDL/Handle功能可以帮助我们了解Oracle进程所调用的动态链接库文件(DDL)和所持有的文件句柄(Handle)信息,因为Windows平台上某个被打开的文件时无法被同时修改或移动的,这在我们维护过程中可能造成许多麻烦, 而又因为win平台上没有如lsof,fuser这样的工具,所以我们在诊断Oracle软件的某些文件锁定问题时可以借助于该功能。
如上图所示Oracle.exe持有”\Device\NamedPipe\*oraspawn_pipe*.4284“等多个文件的句柄。
如上图所示Oracle.exe加载了多个ora开头的DDL,因为Windows平台上的特殊性,Oracle软件大量使用DDL库来替换在Unix平台上编译在Oracle 2进制镜像中的指令,这样方便了升级(直接替换DDL文件就可以了,无需编译,这也导致Windows平台上PSU/CPU补丁发布的特殊性),可以注意到这些DDL文件还标有Version信息,大多为11.02.0000.0001,编译时间为2010/2/10 9:01。
在较新版本的Procexp工具中还加入了create dump功能,以完善该工具的诊断能力。针对Oracle实例的异常现象和Bug可以创建进程转储信息,以便提交给Oracle Support分析问题,一般来说你并不需要亲自分析dump文件,这是一项高级功能,不要对正常运行着的生产数据库使用这一终极手段。
总结
如果你还在抱怨Windows平台上为什么没有一个如Unix平台上NMON功能强大的监控软件的话,那么Procexp会是一个非常杰出的选择,另一点需要感恩的是这是一款免费软件,访问该软件的Homepage,可以让你了解更多的有用信息。
Leave a Reply