在任何系統優化過程中,“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是一個非常出色的輕量型監控工具,條件運行的話可以嘗試一下。