Como utilizar o TRCSESS para melhorar a sua análise de sessões com o TKPROF

O utilitário trcsess consolida a saída do rastreamento de arquivos de rastreamento selecionados com base em vários critérios:

  • Session Id
  • Client Id
  • Service name
  • Action name
  • Module name

Depois de juntar as informações do trace com o trcsess in um único arquivo, esse pode ser processado pelo TKPROF. O trcsess é muito útil para consolidar traces in particupar para analisar performance e debugar problemas.

Há momentos que é habilitado o trace em diversas sessões durante um determinado periodo. Esses traces são gerados todos independentes com as informações de cada uma sessão. Desta forma pode ser utilizado o trcsess para consolidar todos esses traces para que você  DBA possa analisar um único log de trace após o processamento do tkprof.

Isso serve muito em uma configuração de servidor compartilhado uma sessão de usuário é atendido por processos diferentes de tempos em tempos. O trace relativas à sessão do usuário está espalhado por arquivos de rastreamento diferentes pertencentes a diferentes processos. Isso torna difícil para obter um quadro completo do ciclo de vida de uma sessão.

A sintaxe do trcsess é
trcsess        [output=output_file_name]
               [session=session_id]
               [clientid=client_id]
               [service=service_name]
               [action=action_name]
               [module=module_name]
               [trace_files]
Onde:
  • output: especifica o arquivo final a ser utilizado para o tkprof
  • session: serve para consolidar os arquivos na busca da sessão especificada. O identificador da sessao é a combinação o indice da sessao e o serial number, tal como 21.2371 que pode ser encontrado na view v$session;
  • clientid: Consolidação do trace obtendo o client Id;
  • service: Consolidação do trace obtendo o service name;
  • action: Consolidação do trace obtendo o action name;
  • module: Consolidação do trace obtendo o module name;
  • trace_files: Esse é o parametro que deve ser a lista dos arquivos de traces separados por espaços, ou então entre apostrofos ‘*’ na busca de todos os arquivos de traces. Caso não informe nenhum arquivo ou * o trcsess irá utilizar como base o diretorio corrente para buscar seus arquivos de traces.

Mostrarei em um pequeno exemplo como pode ser feito o processo .

Irei abrir algumas sessões com o PL/SQL Developer e efetuar algumas queries. Como o PL/SQL Developer a cada janela aberta ele abre uma nova sessão irei fazer um trace utilizando o module para capturar as minhas execuções.

Isso será executado em um database OLTP RAC11g e modo dedicated.

imagem01 300x168 Como utilizar o TRCSESS para melhorar a sua análise de sessões com o TKPROF

Essa é uma imagem dos comandos executados no PL/SQL Developer que efetuei o trace. Procurando identificar as minhas sessões no banco tenho uma query que mostra quem, de onde e quanto tempo estou conectado no banco entre outros detalhes:

INST USERNAME     OS_PID SESSAO       MACHINE: OSUSER                PROGRAMA               DO LOGIN           OU INATIVO MODULE             STATUS   SERVICE_NAME
---- ---------- -------- ------------ ------------------------------ --------------- --------------- -------------------- ------------------ -------- ------------------------------
   1 SYS           18346 '78,221'     rac11g1.local: oracle          oracle@rac11g1. 17:22:15             00h00m00s       sqlplus@rac11g1.lo ATIVO    SYS$USERS
   2 SYS           13930 '199,61'     rac11g1.local: oracle          oracle@rac11g2. 17:22:15             00h00m00s       sqlplus@rac11g1.lo ATIVO    SYS$USERS
   1 SYS           18719 '140,25'     rac11g1.local: oracle          sqlplus@rac11g1 17:18:34             00h00m00s       sqlplus@rac11g1.lo ATIVO    SYS$USERS
   1 SYS            4945 '63,9'       rac11g1.local: oracle          oraagent.bin@ra 11:43:10             00h00m07s       oraagent.bin@rac11 INATIVO  SYS$USERS
   1 RAFA          18713 '11,239'     SERVR\SERVWTS: rafael.stoever  plsqldev.exe    17:18:28             00h03m46s       PL/SQL Developer   INATIVO  tkrac11g
   1 RAFA          18684 '194,83'     SERVR\SERVWTS: rafael.stoever  plsqldev.exe    17:18:14             00h03m46s       PL/SQL Developer   INATIVO  tkrac11g
   2 SYS            3930 '63,163'     rac11g2.local: oracle          sqlplus@rac11g2 13:40:39             02h05m33s       sqlplus@rac11g2.lo INATIVO  SYS$USERS
   2 TASY           5809 '75,95'      MSHOME\TKVMSQL: Administrador  Aplic.exe       14:17:53             03h04m21s       00000 CorSis_f0    INATIVO  tkrac11g
   1 SYS            5955 '80,127'     rac11g1.local: oracle          sqlplus@rac11g1 13:39:29             03h42m04s       sqlplus@rac11g1.lo INATIVO  SYS$USERS
   2 SYS            4678 '136,1'      rac11g2.local: oracle          oraagent.bin@ra 11:44:02             05h38m10s       oraagent.bin@rac11 INATIVO  SYS$USERS
   1 SYS            4917 '136,1'      rac11g1.local: oracle          oraagent.bin@ra 11:43:08             05h39m04s       oraagent.bin@rac11 INATIVO  SYS$USERS

E com essa minha query consigo ver o Module e o service_name que terei que usar. module: PL/SQL Developer service_name: tkrac11g Primeiramente vou iniciar o trace para esse module:

EXECUTE DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE('tkrac11g','PL/SQL Developer',DBMS_MONITOR.ALL_ACTIONS,TRUE,FALSE,NULL);

Como verificado as minhas 2 sessões no PL/SQL Developer serão rastreadas, porem na imagem mostro mais que uma sessão pois após habilitar o trace eu abro mais duas sessões e efetuo algumas queries.

                                                                                             HORARIO          TEMPO ATIVO
INST USERNAME     OS_PID SESSAO       MACHINE: OSUSER                PROGRAMA               DO LOGIN           OU INATIVO MODULE             STATUS   SERVICE_NAME
---- ---------- -------- ------------ ------------------------------ --------------- --------------- -------------------- ------------------ -------- ------------------------------
   1 SYS           18719 '140,25'     rac11g1.local: oracle          sqlplus@rac11g1 17:18:34             00h00m00s       sqlplus@rac11g1.lo ATIVO    SYS$USERS
   2 SYS           13930 '199,75'     rac11g1.local: oracle          oracle@rac11g2. 17:27:46             00h00m00s       sqlplus@rac11g1.lo ATIVO    SYS$USERS
   1 SYS           18346 '78,237'     rac11g1.local: oracle          oracle@rac11g1. 17:27:46             00h00m00s       sqlplus@rac11g1.lo ATIVO    SYS$USERS
   1 RAFA          18684 '194,83'     SERVR\SERVWTS: rafael.stoever  plsqldev.exe    17:18:14             00h00m07s       PL/SQL Developer   INATIVO  tkrac11g
   1 RAFA          19301 '13,77'      SERVR\SERVWTS: rafael.stoever  plsqldev.exe    17:27:29             00h00m07s       PL/SQL Developer   INATIVO  tkrac11g
   1 SYS            4945 '63,9'       rac11g1.local: oracle          oraagent.bin@ra 11:43:10             00h00m08s       oraagent.bin@rac11 INATIVO  SYS$USERS
   1 RAFA          19164 '196,131'    SERVR\SERVWTS: rafael.stoever  plsqldev.exe    17:25:11             00h02m34s       PL/SQL Developer   INATIVO  tkrac11g
   1 RAFA          18713 '11,239'     SERVR\SERVWTS: rafael.stoever  plsqldev.exe    17:18:28             00h03m41s       PL/SQL Developer   INATIVO  tkrac11g
   2 SYS            3930 '63,163'     rac11g2.local: oracle          sqlplus@rac11g2 13:40:39             02h11m05s       sqlplus@rac11g2.lo INATIVO  SYS$USERS
   2 TASY           5809 '75,95'      MSHOME\TKVMSQL: Administrador  Aplic.exe       14:17:53             03h09m53s       00000 CorSis_f0    INATIVO  tkrac11g
   1 SYS            5955 '80,127'     rac11g1.local: oracle          sqlplus@rac11g1 13:39:29             03h47m35s       sqlplus@rac11g1.lo INATIVO  SYS$USERS
   2 SYS            4678 '136,1'      rac11g2.local: oracle          oraagent.bin@ra 11:44:02             05h43m42s       oraagent.bin@rac11 INATIVO  SYS$USERS
   1 SYS            4917 '136,1'      rac11g1.local: oracle          oraagent.bin@ra 11:43:08             05h44m35s       oraagent.bin@rac11 INATIVO  SYS$USERS

Agora com mais duas sessões abertas e executando algumas queries, podemos verificar se os arquivos de traces estão sendo gerados.

Via putty dou uma olhada em $ORACLE_BASE/diag/tkrac11g/tkrac11g1/trace pois estou utilizando um RAC11g e as minhas sessões estão todas conectadas no node 1.

-rw-r----- 1 oracle oinstall   137825 Sep 15 12:13 alert_tkrac11g1.log
-rw-r----- 1 oracle oinstall     1051 Sep 15 17:24 tkrac11g1_ora_18713.trm
-rw-r----- 1 oracle oinstall    66553 Sep 15 17:24 tkrac11g1_ora_18713.trc
-rw-r----- 1 oracle oinstall      326 Sep 15 17:25 tkrac11g1_ora_19164.trm
-rw-r----- 1 oracle oinstall    29097 Sep 15 17:25 tkrac11g1_ora_19164.trc
-rw-r----- 1 oracle oinstall      876 Sep 15 17:27 tkrac11g1_ora_19301.trm
-rw-r----- 1 oracle oinstall    35617 Sep 15 17:27 tkrac11g1_ora_19301.trc
-rw-r----- 1 oracle oinstall      271 Sep 15 17:27 tkrac11g1_ora_18684.trm
-rw-r----- 1 oracle oinstall    12120 Sep 15 17:27 tkrac11g1_ora_18684.trc
E ai vejo os traces das sessões 18713, 19164, 19301 e 18684 que atenderam os requisitos do meu trace.
Agora que já efetuamos os processos no banco e já temos os nossos 4 traces e vamos parar os traces e analisa-los.
SQL> EXECUTE DBMS_MONITOR.SERV_MOD_ACT_TRACE_DISABLE('tkrac11g','PL/SQL Developer');
Normalmente teriamos que analisar um a um com o tkprof. Mas como o artigo está tratando do trcsess vamos analisar somente um unico arquivo consolidado por esses 4 arquivos de trace.
[oracle@rac11g1 trace]$ trcsess output=trace_arq_20110915-001.trc module='PL/SQL Developer' service='tkrac11g'  '*'
Desta forma geramos um unico arquivo de trace chamado trace_arq_20110915-001.trc que poderá ser analisado com o tkprof

[oracle@rac11g1 trace]$ ls -ltr trace_arq_20110915-001.trc
-rw-r--r-- 1 oracle oinstall 28827390 Sep 15 17:31 trace_arq_20110915-001.trc

[oracle@rac11g1 trace]$ tkprof trace_arq_20110915-001.trc trace-20110915-001.txt sys=no

TKPROF: Release 11.2.0.2.0 - Development on Thu Sep 15 17:31:54 2011

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
[oracle@rac11g1 trace]$

E ai temos o arquivo de trace para analisarmos trace-20110915-001.txt onde está listado somente as sessões efetuadas o rastreamento pelo module e service_name.

%name Como utilizar o TRCSESS para melhorar a sua análise de sessões com o TKPROF

Autor: Rafael Stoever

Bacharel em Sistema de Informação pela Uniasselvi, atualmente cursando Gerenciamento de Projetos em TI pela Pós Graduação Uniasselvi. Atuo como Analista de suporte a banco de dados – DBA pela Lumina Serviços em TI residente de Blumenau/ SC, OPN Certified Specialist, Certificado OCP 10g/11g/12c, OCE RAC10g e Linux 10g. Conhecimentos em Microsoft SqlSever, Mysql e programação web (php,asp).