Olá,
Assim como temos o comando top em sistemas Linux para exibir os processos em execução no sistema operacional bem como analisar a carga de trabalho do sistema, a Oracle criou o comando oratop que vem com o mesmo propósito de análise de carga de trabalho para bancos de dados Oracle. Com o utilitário oratop, podemos visualizar as sessões que estão conectadas na instância de um banco de dados Oracle e investigar, por exemplo, quais sessões estão impactando de forma negativa na performance geral do sistema. Assim como o comando top, o comando oratop também fornece as informações em tempo real. Enfim, com ele é possível identificar os principais eventos de espera (wait events) de forma cumulativa ou por sessão de banco de dados que estão ocorrendo no banco de dados. Vale a pena salientar que o oratop está disponível para download através do My Oracle Support (Metalink) através da note Doc ID 1500864.1.
Segue abaixo as versões de bancos de dados que atualmente suportam o oratop.
- Oracle 11g R2 (11.2.0.3, 11.2.0.4)
- Oracle 12cR1 (12.1.0.1, 12.1.0.2)
Segue abaixo as plataformas de O/S que atualmente suportam o oratop.
- IBM AIX on POWER Systems (64-bit)
- HP-UX PA-RISC (64-bit)
- HP-UX Itanium
- Linux x86-64
- Linux x86
- Oracle Solaris on x86-64 (64-bit)
- Oracle Solaris on SPARC (64-bit)
Para que o oratop funcione é necessário que pelo menos um Oracle Client esteja instalado e que as variáveis de ambiente $ORACLE_HOME, $LD_LIBRARY_PATH e $PATH estejam setadas corretamente:
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/usr/sbin:$PATH
export ORACLE_TERM=vt100
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_DATE_FORMAT=DD/MM/YYYY
export EDITOR=vi
Particularmente, prefiro utilizá-lo no próprio servidor onde já existe uma instalação do Oracle Database e com instâncias que poderão ser monitoradas, mas nada impede de utilizá-lo para monitorar instâncias Oracle remotamente já que o mesmo aceita um serviço TNS.
$ ./oratop username/password@tns_alias
Por padrão o oratop é executado utilizando o formato standard com refresh de 5 segundos e com os wait events sendo computados de forma cumulativa. Particularmente gosto de ter uma visão um pouco mais detalhada e geralmente executo da seguinte forma.
export ORACLE_SID=BD01
./oratop -f -d -i 1 / as sysdba
Onde:- f – opção de formato detalhado
- d – eventos de espera em tempo real (o default é cumulativo)
- i – atualização das informações (em segundos)
Vale a pena salientar que tais configurações podem ser alteradas de forma interativa. Segue abaixo as opções que podermos utilizar.
$ ./oratop -h
oratop: Release 14.1.2
Usage:
oratop [ [Options] [Logon] ]
Logon:
{username[/password][@connect_identifier] | / }
[AS {SYSDBA|SYSOPER}]
connect_identifier:
o Net Service Name, (TNS) or
o Easy Connect (host[:port]/[service_name])
Options:
-d : real-time (RT) wait events, section 3 (default is Cumulative)
-k : FILE#:BLOCK#, section 4 lt is (EVENT/LATCH)
-m : MODULE/ACTION, section 4 (default is USERNAME/PROGRAM)
-s : SQL mode, section 4 (default is process mode)
-c : database service mode (default is connect string)
-f : detailed format, 132 columns (default: standard, 80 columns)
-b : batch mode (default is text-based user interface)
-n : maximum number of iterations (requires number)
-i : interval delay, requires value in seconds (default: 5s)
-v : oratop release version number
-h : this help
Em relação ao help interativo, segue abaixo várias opções que poderemos setar para visualizar e analisar as informações.
oratop: Release 14.1.2
Interactive Keys: [default]
d : toggle between [Cumulative (C)] & Real-Time (RT) (section 3)
k : toggle between [EVENT/LATCH] & object FILE#:BLOCK# (proc section 4)
m : Toggle between [USERNAME/PROGRAM] & MODULE/ACTION (proc section 4)
s : switch to SQL mode (section 4)
f : toggle between [standard] & detailed format (long)
p : switch to [process] mode (section 4)
t : tablespace information
x : basic SQL plan table (requires sql_id input)
i : refresh interval, requires value in seconds [5s]
q : quit/ exit program (also, { Q | Esc | function keys })
Abbreviations:
[N/B]: count(N)/ Byte(B) - (k)illo, (M)ega, (G)iga, (T)erra, [PEZY]
[T] : Time - (u)micro, (m)illi, (s)econd, (h)our, (d)ay, (y)ear
[m/s]: stats interval size, (m) 1 minute, (s) 15s, else, Real Time
[c] : database service centric
Acronym Help Menu:
Section 1 - DATABASE .. [1]
Section 2 - INSTANCE .. [2]
Section 3 - DB WAIT EVENTS .. [3]
Section 4 - PROCESS .. [4]
Quit Help .. (q|Q)
Section 1 - database Global Database information
------------------------------------------------
Version : Oracle major version
role : database_role
db name : db_unique_name
time [s]: time as of the most recent stats (hh24:mi:ss)
up [T]: database uptime
ins [N]: total number of instance(s)
sn [c,N]: total user sessions (active/inactive)
us [c,N]: number of distinct users
mt [s,N]: global database memory total (sga+pga)
fra [N]: flashback recovery area %used, (red > 90%)
er [N]: diag active problem count (faults)
% db [s,N]: database time as %(dbtime/cpu) (red if > 99%)
Section 2 - instance Top 5 Instance(s) Activity Ordered by Database time desc
-----------------------------------------------------------------------------
ID [c,N]: inst_id (instance id)
%CPU [m,N]: host cpu busy %(busy/busy+idle). (red if > 90%)
LOAD [m,N]: current os load. (red if > 2*#cpu & high cpu)
%DCU [m,N]: db cpu otusef as %host cpu. (red if > 99% & high AAS)
AAS [s,N]: Average Active Sessions. (red if > #cpu)
ASC [c,N]: active Sessions on CPU
ASI [c,N]: active Sessions waiting on user I/O
ASW [c,N]: active Sessions Waiting, non-ASI (red if > ASC+ASI)
ASP [m,N]: active parallel sessions (F/G)
AST [c,N]: Active user Sessions Total (ASC+ASI+ASW)
UST [c,N]: user Sessions Total (ACT/INA)
MBPS [m,N]: i/o megabytes per second (throughput)
IOPS [m,N]: i/o requests per second
IORL [m,T]: avg synchronous single-block read latency. (red > 20ms)
LOGR [s,N]: logical reads per sec
PHYR [s,N]: physical reads per sec)
PHYW [s,N]: physical writes per sec
%FR [s,N]: shared pool free %
PGA [s,N]: total pga allocated
TEMP [s,N]: temp space used
UTPS [s,N]: user transactions per sec
UCPS [c,m,N]: user calls per sec
SSRT [c,m,T]: sql service response time (T/call)
DCTR [m,N]: database cpu time ratio
DWTR [m,N]: database wait time ratio. (red if > 50 & high ASW)
%DBT [s,N]: instance %Database Time (e.g. non-rac shows 100%)
Section 3 - db wait events Top 5 Timed Events Cluster-wide, non-idle Ordered by wait time
-----------------------------------------------------------------------------------------
EVENT : wait event name. (red if active)
(C) : Cumulative since instance startup
WAITS : total waits
TIME(s) : total wait time in seconds)
AVG_MS : average wait time in milliseconds
PCT : percent of wait time (all events)
WAIT_CLASS : name of the wait class
Section 4 - process Non-Idle processes Ordered by event wait time desc
----------------------------------------------------------------------
ID [N]: inst_id. (red if blocking)
SID [N]: session identifier. (red if blocking)
SPID [N]: server process os id
USERNAME : Oracle user name
PROGRAM : process program name
SRV : SERVER (dedicated, shared, etc.)
SERVICE : db service_name
PGA [N]: pga_used_mem. (red if continuously growing)
SQL_ID/BLOCKER : sql_id or the final blocker's (inst:sid, in red)
OPN : operation name, e.g. select
E/T [T]: session elapsed time (active/inactive)
STA : ACTive|INActive|KILled|CAChed|SNIped
STE : process state, e.g. on CPU or user I/O or WAIting
WAIT_CLASS : wait_class for the named event
EVENT/*LATCH : session wait event name. Auto toggle with *latch name.
(red if process is hung/spin)
W/T [T]: event wait time. (red if > 1s)
Utilizando a opção "t" no modo interativo, podemos obter algumas informações relacionadas às tablespaces. Dependendo do formato da tela (standard ou detailed) mais informações sobre as tablespaces irão ser mostradas. Chamo a atenção apenas para a informação SIZE que não é referente ao tamanho atual dos datafiles pertencentes à tablespace, mas sim a informação de MAX SIZE, ou seja, o tamanho máximo que a tablespace poderá atingir em função do AUTOEXTEND configurado em cada datafile.
TABLESPACE INFORMATION:
TABLESPACE_NAME SIZE USED USE% STATUS BIG NDBF LOGGING
---------------------------- ---- ---- ---- --------- --- ---- ---------
SYSAUX 32G 1.6G 5.0 ONLINE NO 1 LOGGING
SYSTEM 32G 800M 2.4 ONLINE NO 1 LOGGING
TEMP 10G 1.0M 0 ONLINE NO 1 NOLOGGING
UNDOTBS1 8.0G 71M 0.9 ONLINE NO 1 LOGGING
USERS 0 1.1M 111M ONLINE NO 1 LOGGING
TBS_DATA_01 32G 19M 0 ONLINE NO 1 LOGGING
TBS_DATA_02 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_DATA_03 32G 22M 0 ONLINE NO 1 LOGGING
TBS_DATA_04 32G 2.2M 0 ONLINE NO 1 LOGGING
TBS_DATA_05 32G 64k 0 ONLINE NO 1 LOGGING
TBS_DATA_06 32G 375M 1.1 ONLINE NO 1 LOGGING
TBS_DATA_07 32G 96M 0.3 ONLINE NO 1 LOGGING
TBS_DATA_08 64G 44G 69.1 ONLINE NO 2 LOGGING
TBS_DATA_09 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_DATA_10 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_DATA_11 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_DATA_12 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_DATA_13 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_DATA_14 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_DATA_15 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_INDX_01 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_INDX_02 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_INDX_03 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_INDX_04 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_INDX_05 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_INDX_06 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_INDX_07 32G 2.4G 7.6 ONLINE NO 1 LOGGING
TBS_INDX_08 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_INDX_09 32G 47M 0.1 ONLINE NO 1 LOGGING
TBS_INDX_10 32G 2.6G 8.0 ONLINE NO 1 LOGGING
TBS_INDX_11 32G 64k 0 ONLINE NO 1 LOGGING
TBS_INDX_12 32G 437M 1.3 ONLINE NO 1 LOGGING
TBS_INDX_13 32G 57M 0.2 ONLINE NO 1 LOGGING
TBS_LOB_01 96G 70G 73.3 ONLINE NO 3 LOGGING
TBS_LOB_02 32G 5.6G 17.4 ONLINE NO 1 LOGGING
TBS_LOB_03 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_LOB_04 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_LOB_05 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_LOB_06 32G 1.0M 0 ONLINE NO 1 LOGGING
TBS_LOB_07 32G 1.2M 0 ONLINE NO 1 LOGGING
TBS_LOB_08 32G 3.8G 11.9 ONLINE NO 1 LOGGING
TBS_LOB_09 32G 64k 0 ONLINE NO 1 LOGGING
TBS_LOB_10 32G 2.9M 0 ONLINE NO 1 LOGGING
---------------------------- ---- ---- ----
Total: 1.4T 132G 9.5
press Enter to return
5 comentários:
Muito boa explicação. Obrigado !!
Olá Marcelo,
Obrigado pela visita ;-)
Abraços
Legatti
Artigo muito bom. Obrigado pelas explicaçoes.
Belo artigo, Eduardo Legatti. Já te acompanho a muito tempo e mesmo com o passar do tempo, esses seus artigos ainda são uma preciosidade. Obrigado pela dedicação em manter esse conteúdo ativo.
Joia!!!! Abs
Postar um comentário