在任何系统优化过程中,“80/20原则”是我们一定要关注的问题。简单的说,就是我们系统80%的性能问题、现象,都是有少数几个甚至一个问题造成的。这就需要我们面对复杂的系统性能问题的时候,要学会“拨开云雾、蛇打七寸”。
落实在Oracle优化过程,同样如此。从10g开始,我们开始频繁接受“Top-xxx”的概念,无论是从OEM(Oracle Enterprise Manager)还是借助AWR事后报告库,解决主要矛盾,发掘主要Top Events就成了我们日常工作不可缺少的部分。
实际工作中,对Top的发掘和Oracle动态信息的收集,很多时候还是有点力不从心和滞后之感强烈。Oracle官方的客户服务网站MOS,经常有一些有用的小工具,提供给我们使用。本篇中,我们主要来介绍下Oratop工具的特点和使用。
1、Oratop工具简述
Oratop源自MOS的一篇文章和工具链接(oratop - utility for near real-time monitoring of databases, RAC and Single Instance [ID 1500864.1])。从名称上看,Oratop最大特点是支持实时轻量级监控。在Oracle 12c的EM Express之前,OEM还是一个重体积的组件。相比之下,oratop完全适合那些想使用数据库实时监控功能,但是又不愿意启动OEM的用户需要。
从功能上看,Oratop主要有三大特点:
ü 监控当前的数据库活动;
ü 监控数据库性能;
ü 识别当前阻塞会话和瓶颈会话;
目前,Oratop是在MOS上免费下载,只有Linux版本,分别有32位和64位两个版本。
2、软件安装初启动
从网站上下载软件之后,是一个命名为oratop.v13.2.1_X8664的可执行程序,注意要区分32位版和64位版。
首先,判断适合的Linux版本,并且创建程序目录。Oratop是一个典型的“绿色”软件,不需要安装,只需要给一个运行目录即可。
--64位操作系统
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# mkdir /oratop
[root@localhost ~]# cd /oratop
[root@localhost /]# cd oratop/
[root@localhost oratop]# ls -l
total 0
[root@localhost oratop]#
进行目录的权限转换和程序拷贝。为了方便执行,我们最好还要进行一下重命名工作。
[root@localhost /]# chown -R oracle:oinstall /oratop
[root@localhost /]# su - oracle
[oracle@localhost ~]$ cd /oratop/
[oracle@localhost oratop]$ ls -l
total 92
-rw-r--r--. 1 oracle oinstall 93640 May 17 13:39 oratop.v13.2.1_X8664
[root@localhost oratop]# ls -l
total 92
-rw-r--r--. 1 root root 93640 May 17 13:39 oratop.v13.2.1_X8664
[oracle@localhost oratop]$ mv oratop.v13.2.1_X8664 oratop
[oracle@localhost oratop]$ ls -l
total 92
-rw-r--r--. 1 oracle oinstall 93640 May 17 13:39 oratop
注意:使用oratop在环境变量上需要一些额外的配置内容。主要是对于变量LD_LIBRARY_PATH的配置。我们一般都不会去配置这目录,但是oratop要求必须进行配置。
配置方法是修改根目录上的.bash_profile文件。
[oracle@localhost ~]$ vi .bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1/
export ORACLE_SID=isis2db
export PATH=$PATH:$ORACLE_HOME/bin
(篇幅原因,掠过部分内容……)
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
".bash_profile" 36L, 901C written
[oracle@localhost ~]$
[oracle@localhost ~]$ env | grep LIB
LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/dbhome_1//lib
下面我们来试着执行以下命令。
[oracle@localhost oratop]$ ./oratop -i 10 / as sysdba
oratop: Release 13.2.1 Production on Fri May 17 13:43:34 2013
Copyright (c) 2011, Oracle. All rights reserved.
Processing ...(等待片刻……)
参数-i表示数据刷新间隔,也就是多长实际更新一下页面数据信息。/ as sysdba表示登录本机连接。注意,这也就意味着我们可以远程使用oratop连接到其他服务器上面去。更进一步说,虽然oratop只有Linux版本程序,但是通过远程连接的方法,他是可以连接到任何版本操作系统上的Oracle服务器的。
出现字符界面显示。
oratop 1: 131 isis 13:44:24 up 0.0h, 1 ins, 3G mt, 41 sn, 3 us, 0% db
ID %CU HLD MBPS IORL %FR PGAU ASC ASI ASW ASP AAS USN TPS UCPS SSRT DBC DBW
1 12 0 71 0m 18 161M 1 0 0 0 0.1 41 0 24 3m 94 6
EVENT (Cumulative) AVG: TOT WAITS TIME(s) AVG_MS PCT WAIT_CLASS
DB CPU 112868 75
SQL*Net message from dblink 16794060 14852 0.9 10 Network
SQL*Net more data from clien 193150 8260 42.8 5 Network
log file parallel write 1025524 7308 7.1 5 System I/O
enq: TX - row lock contentio 1289 7248 5622.9 5 Application
ID SID SPID USR PROG PGA OPN SQLID/BLOCKER E/T STATUS STE WAIT_EVENT W/T
3、初识Oratop
从字符界面上看,oratop结果集合分为四个部分,分别为:Header Section、Database Section、DB Events Section和Processes Section。
Header Section中,包括了连接数据库的总体信息,包括运行多长时间、实例个数(for RAC)、内存大小和数据库占据CPU时间的比例。
Database Section中,包括了各个实例(for RAC)下,每个实例的基本参数和复杂信息。如每个实例活动会话个数、每秒的事务数量和内存使用情况等。
DB Events Section是从Wait Event角度进行评估。评估排在头几位的等待事件信息,默认情况下,这个度量是累计的,也就是从启动数据库到当前时间。我们可以切换到当前时间模式下。
Processes Section是记录下处在Block和Contention状态的连接会话信息。当数据库出现有会话被阻塞的情况,就会记录在这个Section里面。
4、丰富的帮助系统
Oratop结果显示中,大量使用的简写和缩写,这在一定程度上阻碍我们阅读结果。为此,Oratop开发人员设计了完备功能的帮助体系。
在使用-h参数,或者运行过程中按下键盘h,就可以切换到帮助界面。
使用h按键
oratop: Release 13.2.1
------------------------------------------------------------------------------
Dynamic Keys
d : Toggle Top 5 Wait Events between Real-Time and Cumulative
f : Toggle between short & long format (for header & Process sections)
i : Interval Delay time (requires value in seconds)
Nomenclature:
[M] : Signify 1 minute averaged value, else, Real Time
[F] : denote a Forground (FG) value, else, Background (BG)
------------------------------------------------------------------------------
Acronym Help Menu:
HEADER Section .. [1]
DATABASE Section .. [2]
DB EVENTS Section .. [3]
PROCESSES Section .. [4]
Quit Help .. (Q|q)
Enter selection Number:
动态按键(Dynamic Keys)实际上就是在运行过程中,可以动态实时点击,查看不同维度结果的案件。
笔者比较喜欢d按键,这样可以从累计Event信息到实时Event信息,把握最新的数据库等待时间状态。
(d) –使用了d动态按键
oratop 1: 376 NBST 14:31:22 up 5.1d, 1 ins, 2G mt, 135 sn, 7 us, 4% db
ID %CU HLD MBPS IORL %FR PGAU ASC ASI ASW ASP AAS USN TPS UCPS SSRT DBC DBW
1 2 0 0 0m 17 394M 1 0 0 0 0.0 135 4 71 297u 85 15
EVENT (Real-Time) AVG: TOT WAITS TIME(s) AVG_MS PCT WAIT_CLASS
DB CPU 1867 100
ID SID SPID USR PROG PGA OPN SQLID/BLOCKER E/T STATUS STE WAIT_EVENT W/T
另一部分帮助就是显示对四个section的解释,解释的非常详细,值得读者学习。篇幅原因,这里只显示一份结果。
Section 1- HEADER (Global information)
"oratop" : program name
: instance_id to which oratop is connected to
: oratop's SID
: DB_UNIQUE_NAME
[M]: Time of most recent stats (hh24:mi:ss)
: Database Uptime
: Total number of instance(s)
: Total DB memory cluster wide (SGA+PGA)
[F]: User sessions (idle & active)
[F]: Number of distinct users (idle & active)
<%db> : %database busy, 0% indicate idle db
5、复杂应用
Oratop的本质和优势在于轻量型和实时。一个很小的程序,可以在自身消耗较小的情况下发现问题。
Block and Contentio是Process Section部分重点问题。阻塞是数据库内部资源征用的一种结果,及时发现Blocking和Contention是非常重要的。
下面片段是笔者模拟的一个两个会话同时修改一行数据,之后一个会话被阻塞时,oratop监控到的情况。
锁定等待
ID SID SPID USR PROG PGA OPN SQLID/BLOCKER E/T STATUS STE WAIT_EVENT W/T
1 187 25971 SYS DEDI 908k DEL 1:193:25968 20s ACTIVE WAI enq: TX - 20s
在信息中,等待Session信息、SQL信息和等待事件信息都是我们进行进一步调优的依据。
另外,我们可以在一台Linux上安装oratop,监控连接另一台远程数据库服务器,比如AIX系统。
首先,我们需要建立本地连接名。
[oracle@localhost oratop]$ netca
Oracle Net Services Configuration:
Default local naming configuration complete.
Created net service name: nbstest
Oracle Net Services configuration successful. The exit code is 0
[oracle@localhost oratop]$ tnsping nbstest
TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 17-MAY-2013 14:06:38
Copyright (c) 1997, 2011, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.15.66)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = nbstest)))
OK (0 msec)
监控时候,就是用对应的用户名密码和连接名进行连接。
[oracle@localhost oratop]$ ./oratop -i 10 sys/sys@nbstest as sysdba
oratop: Release 13.2.1 Production on Fri May 17 14:07:39 2013
Copyright (c) 2011, Oracle. All rights reserved.
6、形色参数
最后我们介绍一下oratop可以使用的参数。在示例中,我们见到了-i参数。
-i参数表示监控间隔。后面一般跟着一个数字,表示每隔几秒钟进行一次数据收集。这个参数要进行选择的,如果太大,很多关键数据不能收集查看。如果设置太少,oratop自身也会造成性能瓶颈。
-b批量运行模式。实时数据如果需要输入到一个结果集合文件,供下一步处理使用,可以使用b模式参数。当设置b参数之后,oratop会持续运行,或者在事先设计好的次数后结束。
-n设置最大迭代操作次数。
-d一改默认是累计事件的统计情况,采用实时统计。
[oracle@localhost oratop]$ ./oratop -i 5 -b -d / as sysdba
oratop: Release 13.2.1 Production on Fri May 17 14:59:32 2013
Copyright (c) 2011, Oracle. All rights reserved.
Processing ...
oratop: Release 13.2.1 Production on Fri May 17 14:59:32 2013
ID SID SPID USR PROG PGA OPN SQLID/BLOCKER E/T STATUS STE WAIT_EVENT W/T
oratop: Release 13.2.1 Production on Fri May 17 15:00:17 2013
oratop 1: 202 isis 15:00:09 up 0.0h, 1 ins, 3G mt, 67 sn, 3 us, 3% db
ID %CU HLD MBPS IORL %FR PGAU ASC ASI ASW ASP AAS USN TPS UCPS SSRT DBC DBW
1 0 0 0 0m 17 183M 1 0 0 0 0.0 67 0 6 286u 60 40
EVENT (Real-Time) AVG: TOT WAITS TIME(s) AVG_MS PCT WAIT_CLASS
DB CPU 1944 100
(有省略…..)
oratop: Release 13.2.1 Production on Fri May 17 15:00:27 2013
7、结论
Oratop是一个非常出色的轻量型监控工具,条件运行的话可以尝试一下。