Para melhor visualização, recomendo resolução de no mínimo 1280 x 800 e navegador Mozilla Firefox


terça-feira, 1 de dezembro de 2015

Um pouco sobre o ORATOP: Utilitário para monitoramento de bancos de dados Oracle

Por Eduardo Legatti

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

Segue abaixo uma figura que mostra em detalhes as sessões que podemos analisar com o oratop.



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:

Marcelo Ribeiro disse...

Muito boa explicação. Obrigado !!

Eduardo Legatti disse...

Olá Marcelo,

Obrigado pela visita ;-)

Abraços

Legatti

Aramis disse...

Artigo muito bom. Obrigado pelas explicaçoes.

MaxiGenus disse...

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.

Eduardo Legatti disse...

Joia!!!! Abs

Postagens populares