GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

Verificando I/O com DTrace

A ferramenta DTrace veio como mais uma arma contra o “TroubleChuting”, e aqui demonstro como utiliza-la para identificar qual o maior consumidor de I/O.

Os comandos mais complexos de DTrace geralmente são englobados em um scipt, mas eles também podem ser executados diretamente na linha de comando, para uma análise mais rápida.

Identificando via sar que há um gargalo de I/O em um Solaris 10 dedicado a uma Instance Oracle Database 11.2.0.2, imediatamente acusaríamos o banco de dados, e investigaríamos dentro deste onde está o consumo de I/O.

Não é bem assim.

Após o sar, confirmo via iostat o gargalo de I/O, vendo que se trata do device c0d0, que entre outras coisas abriga os DATAFILEs do Oracle Database.

Oracle Corporation      SunOS 5.10      Generic Patch   January 2005
  # bash
  bash-3.00# uname -a
  SunOS nerv03 5.10 Generic_142910-17 i86pc i386 i86pc
  bash-3.00# cat /etc/release
  Oracle Solaris 10 9/10 s10x_u9wos_14a X86
  Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  Assembled 11 August 2010
  bash-3.00# iostat -xnz 2 10
  extended device statistics
  r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
  30.4  140.3  530.4 2209.7  3.6  0.5   20.9    3.0  14  33 c0d0
  extended device statistics
  r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
  22.7  117.3  215.5  858.0  0.0  0.4    0.1    2.7   1  29 c0d0
  extended device statistics
  r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
  17.0   23.5  164.0  134.0  0.0  0.2    0.7    5.0   3  16 c0d0
  extended device statistics
  r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
  15.5  121.5  278.0  884.0  0.1  0.3    0.5    2.0   4  20 c0d0
  extended device statistics
  r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
  17.5  162.0  204.0 1200.0  0.1  0.4    0.5    2.4   7  31 c0d0
  extended device statistics
  r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
  16.0   28.0  168.0  144.0  0.0  0.3    0.6    6.5   2  24 c0d0
  extended device statistics
  r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
  20.5  174.0  228.0 1248.0  0.1  0.4    0.6    2.2   6  31 c0d0
  extended device statistics
  r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
  16.0  155.5  240.0 1076.0  0.2  0.3    1.2    1.9   3  25 c0d0
  extended device statistics
  r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
  24.0   48.5  236.0  218.0  0.2  0.3    2.8    4.7   3  28 c0d0
  extended device statistics
  r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
  17.0  128.5  168.0  852.0  0.1  0.3    0.7    2.3   4  24 c0d0

Para verificar quais são os processos e arquivos que estão fazendo mais leituras no Sistema Operacional via DTrace, utilizo o comando abaixo. Este comando coleta os dados mas não fornece nenhum retorno, até que seja cancelado via Crtl+C. Portanto, eu espero cerca de 10 minutos, cancelo o comando, e verifico o resultado.

bash-3.00# dtrace -n 'syscall::*read:entry {@f[execname, fds[arg0].fi_pathname] = count();}'
  dtrace: description 'syscall::*read:entry ' matched 2 probes
  ^C
 automountd                                                                                                   1
  oradism                                                                                                      1
  sshd                                                                                                         1
  utmpd                                               /proc/1769/psinfo                                                 1
  utmpd                                               /proc/845/psinfo                                                  1
  utmpd                                               /proc/985/psinfo                                                  1
  gnome-terminal                                                                                               2
  metacity                                                                                                     2
  nautilus                                                                                                     2
  nscd                                                /etc/inet/hosts                                                   2
  oracle                                              /proc/1259/psinfo                                                 2
  oracle                                              /proc/1263/psinfo                                                 2
  oracle                                              /proc/1275/psinfo                                                 2
  oracle                                              /proc/1277/psinfo                                                 2
  oracle                                              /proc/1279/psinfo                                                 2
  oracle                                              /proc/1281/psinfo                                                 2
  oracle                                              /proc/1283/psinfo                                                 2
  oracle                                              /proc/1309/psinfo                                                 2
  oracle                                              /proc/1324/psinfo                                                 2
  oracle                                              /proc/1326/psinfo                                                 2
  oracle                                              /proc/1459/psinfo                                                 2
  oracle                                              /proc/1662/psinfo                                                 2
  oracle                                              /proc/1664/psinfo                                                 2
  oracle                                              /proc/1666/psinfo                                                 2
  oracle                                              /proc/1668/psinfo                                                 2
  oracle                                              /proc/1670/psinfo                                                 2
  oracle                                              /proc/1672/psinfo                                                 2
  oracle                                              /proc/1674/psinfo                                                 2
  oracle                                              /proc/1676/psinfo                                                 2
  oracle                                              /proc/1678/psinfo                                                 2
  oracle                                              /proc/1680/psinfo                                                 2
  oracle                                              /proc/1682/psinfo                                                 2
  oracle                                              /proc/1684/psinfo                                                 2
  oracle                                              /proc/1686/psinfo                                                 2
  oracle                                              /proc/1688/psinfo                                                 2
  oracle                                              /proc/1690/psinfo                                                 2
  oracle                                              /proc/1780/psinfo                                                 2
  oracle                                              /proc/1875/psinfo                                                 2
  oracle                                              /proc/1977/psinfo                                                 2
  oracle                                              /proc/1981/psinfo                                                 2
  oracle                                              /proc/1983/psinfo                                                 2
  utmpd                                               /var/adm/utmpx                                                    2
  utmpd                                               /var/adm/wtmpx                                                    2
  wnck-applet                                                                                                  2
  clock-applet                                                                                                 4
  gnome-smproxy                                                                                                5
  oracle                                              /u01/app/oracle/fast_recovery_area/ORCL/controlfile/o1_mf_76kvsvb3_.ctl                5
  oracle                                              /proc/1298/psinfo                                                 8
  oracle                                              /proc/1301/psinfo                                                 8
  oracle                                              /proc/1303/psinfo                                                 8
  oracle                                              /proc/1305/psinfo                                                 8
  oracle                                              /proc/1246/psinfo                                                26
  oracle                                              /proc/1248/psinfo                                                42
  oracle                                              /proc/1253/psinfo                                                42
  oracle                                              /proc/1257/psinfo                                                42
  oracle                                              /proc/1261/psinfo                                                42
  oracle                                              /proc/1265/psinfo                                                42
  oracle                                              /proc/1267/psinfo                                                42
  oracle                                              /proc/1269/psinfo                                                42
  oracle                                              /proc/1271/psinfo                                                42
  oracle                                              /proc/1273/psinfo                                                42
  oracle                                              /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_76kvqzkd_.dbf               55
  xscreensaver                                                                                                56
  oracle                                              /u01/app/oracle/oradata/ORCL/controlfile/o1_mf_76kvsv4s_.ctl              185
  oracle                                              /u01/app/oracle/oradata/ORCL/datafile/o1_mf_soe_76kw2cvf_.dbf              428
  oracle                                              /u01/app/oracle/oradata/ORCL/datafile/o1_mf_soe_76kw1rlr_.dbf              485
  oracle                                              /u01/app/oracle/oradata/ORCL/datafile/o1_mf_soe_76kw2gnf_.dbf              494
  oracle                                              /u01/app/oracle/oradata/ORCL/datafile/o1_mf_soe_76kw2kvn_.dbf              527
  oracle                                              /u01/app/oracle/oradata/ORCL/datafile/o1_mf_soe_76kw25xf_.dbf              590
  oracle                                                                                                    1574
  Xorg                                                                                                      2206
  java                                                                                                      3098
  bash-3.00#

Como vimos acima, na verdade o maior gerador de leituras é o java, e não o Oracle Database. Até o Xorg, que não devia estar em uso, causa mais leituras do que o Oracle Database.
Vamos verificar agora as gravações, com um comando parecido.

bash-3.00# dtrace -n 'syscall::*write:entry {@f[execname, fds[arg0].fi_pathname] = count();}'
  dtrace: description 'syscall::*write:entry ' matched 2 probes
  ^C
 dtrace                                              /devices/pseudo/pts@0:3                                           1
  sshd                                                /devices/pseudo/clone@0:ptm                                       1
  sshd                                                                                                         1
  init                                                /etc/svc/volatile/init-next.state                                 2
  gnome-netstatus-                                                                                             7
  xscreensaver                                                                                                21
  oracle                                              /u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_76kvqzmm_.dbf               27
  oracle                                              /u01/app/oracle/fast_recovery_area/ORCL/controlfile/o1_mf_76kvsvb3_.ctl               28
  oracle                                              /u01/app/oracle/oradata/ORCL/controlfile/o1_mf_76kvsv4s_.ctl               28
  clock-applet                                                                                                62
  oracle                                              /u01/app/oracle/oradata/ORCL/datafile/o1_mf_soe_76kw2cvf_.dbf              269
  oracle                                              /u01/app/oracle/oradata/ORCL/datafile/o1_mf_soe_76kw2gnf_.dbf              269
  oracle                                              /u01/app/oracle/oradata/ORCL/datafile/o1_mf_soe_76kw1rlr_.dbf              280
  oracle                                              /u01/app/oracle/oradata/ORCL/datafile/o1_mf_soe_76kw25xf_.dbf              337
  oracle                                              /u01/app/oracle/oradata/ORCL/datafile/o1_mf_soe_76kw2kvn_.dbf              367
  java                                                                                                       538
  oracle                                                                                                     754
  oracle                                              /u01/app/oracle/fast_recovery_area/ORCL/onlinelog/o1_mf_5_76kml2r4_.log             1122
  oracle                                              /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_5_76kmk8bs_.log             1122
  bash-3.00#

As gravações sim são mais executadas no Oracle Database, mas lá está o java ajudando na lentidão.

Esta é uma análise superficial, pois considerou apenas a quantidade de gravações, e não o seu tamanho, mas já demonstra como encontrar informações detalhadas sobre o comportamento do Sistema Operacional via DTrace.

Share

You may also like...

4 Responses

  1. Silvério disse:

    Portilho,

    Gostei da sugestão…. mas e para Linux ? Recomenda o systemtap ?

  2. Adriano Alves disse:

    Se não me engano a Oracle implementou o DTrace no Oracle Linux.

  3. Nunca usei o systemtap, vou testar.

  4. Implementou a ferramenta, mas o problema são os Probes, que ainda não muito poucos.
    Probes são as fontes de informação que o DTrace pode obter do Kernel.
    Para ter uma idéia, no Solaris 10 são uns 10.000, no Solaris 11 só uns 1.000, e no Linux só uns 200.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *