Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Rastreamento SQL, evento 10046 no Oracle:trcsess, utilitário tkprof


O rastreamento é uma parte importante para o ajuste do banco de dados Oracle. Isso ajudará a capturar toda a declaração do problema, o evento de espera que é responsável pela execução lenta da sessão.
O banco de dados Oracle fornece muitas maneiras mais rápidas de rastrear a sessão local, outra sessão do usuário   e formatar o rastreamento para torná-lo legível


Vamos dar uma olhada em como ativar o rastreamento SQL, evento 10046 no banco de dados Oracle e trcsess, utilitário tkprof

Índice

SQL Trace ,100046 event


Se você quiser rastrear na sessão local, aqui estão as etapas para ativar o rastreamento SQL 
Rastreamento normal alter session set sql_trace =true; -- Para colocar o trace onalter session set sql_trace =false; -- Para desativar o rastreamentoNível completo com evento de espera e vincular rastreamento alter session set events ='10046 trace name context forever, level 12';Para colocar o trace offalter session set events ='10046 trace name context off';Igual ao normal trace exec DBMS_SESSION.set_sql_trace(sql_trace => TRUE);exec DBMS_SESSION.set_sql_trace(sql_trace => FALSE);

Se você quiser rastrear em outra sessão em execução, aqui estão as etapas
Rastreamento normal execute dbms_system.set_sql_trace_in_session (‘sid’,’serial’,true); -- Para colocar rastreamento em executar dbms_system.set_sql_trace_in_session (‘sid’,’serial’,true); -- Para desativar o rastreamentoNível completo com evento de espera E vincular rastreamento execute dbms_system.set_ev(‘sid’,’serial’,10046,12,’’);Para desativar o rastreamento execute dbms_system.set_ev(‘sid’,’serial’,10046,0,’’);

Você deve ter visto o uso de 12,0 em várias declarações acima. Eles são níveis de rastreamento. O Oracle Tracing tem níveis de rastreamento. Aqui estão os valores válidos
0 Sem rastros. Como desligar o sql_trace.
2 O equivalente ao sql_trace regular
Fornece caminho de execução, contagem de linhas, menor arquivo simples
Vantagens
Fornece caminho de execução
Fornece contagens de linhas
Produz o menor arquivo simples
Desvantagens
Não é possível dizer quais valores foram fornecidos em tempo de execução ao SQL
Se as estatísticas da consulta forem baixas, mas o tempo de execução for longo, não é possível dizer quais eventos causaram a longa espera
4 O mesmo que 2, mas com a adição de valores de variáveis ​​de vinculação
Vantagens
Fornece caminho de execução
Fornece contagens de linhas
Pode dizer para quais valores a instrução foi executada
Desvantagens
Novamente, se o tempo de execução for longo e as estatísticas forem baixas, será difícil dizer por que nesse tipo de rastreamento.
Produz um arquivo simples maior que o rastreamento regular porque as informações da variável de vinculação precisam ser armazenadas.
8 O mesmo que 2, mas com a adição de eventos de espera
Rastreamento regular mais os tempos de operação do banco de dados que o SQL esperou ter feito para concluir. Por exemplo:tempos de acesso ao disco.
Vantagens
Fornece caminho de execução
Fornece contagens de linhas
Pode informar os horários de todos os eventos associados ao SQL.
Desvantagens
O arquivo de rastreamento pode facilmente atingir o máximo devido a todas as informações que o Oracle deve gravar no arquivo de rastreamento e, em seguida, apenas informações parciais estão disponíveis no arquivo de rastreamento.
Informações da variável de vinculação não estão disponíveis
12 O mesmo que 2, mas com valores de variáveis ​​de ligação e eventos de espera
Rastreamento regular com as informações de espera e ligação. Contém as informações mais completas e produzirá o maior arquivo de rastreamento.
Fornece o caminho de execução
Fornece contagens de linhas
Pode informar os horários de todos os eventos associados ao SQL.
Pode informar quais valores os SQL foi executado com
Vantagens
Fornece caminho de execução
Fornece contagens de linhas
Pode informar os horários de todos os eventos associados ao SQL.
Pode informar com quais valores o SQL foi executado
Desvantagens
O arquivo de rastreamento pode facilmente atingir o máximo devido a todas as informações que o Oracle deve gravar no arquivo de rastreamento e, em seguida, apenas informações parciais estão disponíveis no arquivo de rastreamento.

Existem outras maneiras de fazer o rastreamento também. Aqui estão alguns deles
(1) ORADEBUG
Isso requer login como sysdba
oradebug setospid   1111   -- Sessão de depuração com o Oracle especificado  processo idoradebug setorapid  1111  --- Sessão de depuração com o SO especificado processadoradebug evento 10046 trace name context para sempre, nível 4;oradebug event 10046 trace name context off; --- Isso desativa o traceoradebug close_trace  --- Isso fecha  o arquivo de rastreamentoOradebug TRACEFILE_NAME;

(2) Com o Oracle 10g, as opções de rastreamento SQL foram estendidas usando o pacote DBMS_MONITOR
EXECUTE dbms_monitor.session_trace_enableQual é semelhanteALTER SESSION SET EVENTS '10046 trace name context forever, level 2';EXECUTE dbms_monitor.session_trace_enable(binds=>true);Qual é similarALTER SESSION SET EVENTS '10046 trace name context forever, level 4';EXECUTE dbms_monitor.session_trace_enable (waits=>true);Qual é semelhanteALTER SESSION SET EVENTS '10046 trace name context forever, level 8';EXECUTE dbms_monitor.session_trace_enable('sid','serial#')Qual é similarexecute dbms_system.set_ev( 'sid','serial',10046,2,'');EXECUTAR dbms_monitor.session_trace_enable('sid','serial#',binds=>true);O que é similarexecute dbms_system.set_ev('sid','serial' ,10046,4,'');EXECUTAR dbms_monitor.session_trace_enable ('sid','serial#',waits=>true);O que é semelhanteexecute dbms_system.set_ev('sid','serial',10046,8,'' );

Existem muitas outras funcionalidades disponíveis no dbms_monitor. Podemos habilitar o rastreamento com base no identificador do cliente e de várias maneiras

Como identificar os arquivos Trace


Podemos identificar os arquivos de rastreamento usando o spid da sessão. Além disso, o arquivo de rastreamento conterá o par sid,serial#  no início do arquivo de rastreamento.
A consulta abaixo pode ser usada para encontrar o arquivo de rastreamento de sessão local
selecione c.valor || '/' || d.instance_name ||'_ora_' || a.spid || '.trc' tracefrom v$process a, v$session b, v$parameter c, v$instance donde a.addr =b.paddrand b.audsid =userenv('sessionid') e c.name ='user_dump_dest'/ 

Há outra maneira fácil de identificar o arquivo de rastreamento que é chamado de identificador de rastreamento
alterar session set tracefile_identifer='ORAC'; Este é um identificador

Arquivo de rastreamento de exemplo
Arquivo de rastreamento /app/oracle/TEST/diag/rdbms/test/TEST/trace/TEST_ora_13025_IDEN.trcOracle Database 11g Enterprise Edition Versão 11.2.0.4.0 - Produção de 64 bitsCom particionamento, clusters de aplicativos reais, OLAP, mineração de dados e Real Application Testing optionsORACLE_HOME =/app/oracle/TEST/11.2.0/dbSystem name:    SunOS12Node name:sun12Release:   5.10Version:   Generic_144488-11Machine:   sun4uNome da instância:TESTRedo thread montado por esta instância:1Oracle process number:202Unix process pid:13025 , imagem:[email protected] SunOS12*** 2013-10-21 12:28:56.461*** SESSION ID:(3875.17341) 2013-10-21 12:28:56.461*** CLIENT ID:() 2013 -10-21 12:28:56.461*** NOME DO SERVIÇO:(TEST) 2013-10-21 12:28:56.461*** NOME DO MÓDULO:([email protected](TNS V1-V3)) 2013-10 -21 12:28:56.461*** NOME DA AÇÃO:() 21-10-2013 12:28:56.461CLOSE #4:c=0,e=11,dep=1,type=1,tim=8866891135825=====================PARSING IN CURSOR #5 len=356 dep=1 uid=173 oct=3 lid=173 tim=8866891136821 hv=2468783182 ad='4c70e4398' sqlid='0wmwsjy9kd92f'SELECT PROFILE_OPTION_ID, APPLICATION_ID, SITE_ENABLED_FLAG , APP_ENABLED_FLAG , RESP_ENABLED_FLAG , USER_ENABLED_FLAG, ORG_ENABLED_FLAG , SERVER_ENABLED_FLAG, SERVERRESP_ENABLED_FLAG, HIERARCHY_TYPE, USER_CHANGEABLE_FLAG FROM FND_PROFILE_OPTIONS WHERE PROFILE_OPTION_NAME =:B1 AND START_DATE_ACTIVE <=SYSDATE AND NVL(END_DATE_ACTIVE, SYSDATE)>=SYSDATEEND OF STMTBINDS # 5:Bind#0oacdty=01 mxl=128(80) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=01 csi=871 siz=128 off=0kxsbbbfp=ffffffff7d677b48  bln=128  avl=21 flg=0value="PER_BUSINESS_GROUP_ID"EXEC #5:c=0,e=1474,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,plh=1374985481 ,tim=8866891138224FETCH #5:c=0,e=61,p=0,cr=3,cu=0,mis=0,r=1,dep=1,og=1,plh=1374985481,tim=8866891138429CLOSE #5:c=0,e=5,dep=1,type=3,tim=8866891138503=====================PARSING IN CURSOR #4 len=230 dep=1 uid=173 oct=3 lid=173 tim=8866891138634 hv=3575592451 ad='3aeea3da0' sqlid='55dc767ajydh3'SELECT PROFILE_OPTION_VALUE FROM FND_PROFILE_OPTION_VALUES WH ERE PROFILE_OPTION_ID =:B4 AND APPLICATION_ID =:B3 AND LEVEL_ID =10003 AND LEVEL_VALUE =:B2 AND LEVEL_VALUE_APPLICATION_ID =:B1 AND PROFILE_OPTION_VALUE NÃO É NULLEND OF STMTBINDS #4:Bind#0oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pré=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=96 off=0kxsbbbfp=ffffffff7d677b68  bln=22  avl=03  flg=05value=1204Bind#1oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pré=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=0 off=24kxsbbbfp=ffffffff7d677b80  bln=22  avl=02  flg=01value=800Bind#2oacdty=02 mxl=22(21) mxlc =00 mal=00 scl=00 pré=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=0 off=48kxsbbbfp=ffffffff7d677b98  bln=22  avl=04  flg=01value=50334Bind#3oacdty=02 mxl=22(21 ) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=0 off=72kxsbbbfp=ffffffff7d677bb0  bln=22  avl=01  flg=01value=0EXEC #4:c=0, e=377,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,plh=2802907561,tim=8866891138978FETCH #4:c=0,e=26, p=0,cr=3,cu=0,mis=0,r=0,dep=1,og=1,plh=2802907561,tim=886689113 9050CLOSE #4:c=0,e=2,dep=1,type=3,tim=8866891139116=====================PARSING IN CURSOR #5 len =191 dep=1 uid=173 oct=3 lid=173 tim=8866891139308 hv=303338305 ad='3bedf0e48' sqlid='7qs7fx89194u1'SELECT PROFILE_OPTION_VALUE FROM FND_PROFILE_OPTION_VALUES WHERE PROFILE_3OPTION_ID_ =:B2 AND LEVEL_ID =:B4 AND LEVEL_ID =:B4 AND LEVEL_ID LEVEL_VALUE =:B1 AND PROFILE_OPTION_VALUE NÃO É NULLEND OF STMTBINDS #5:Bind#0oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=96 off=0kxsbbbfp=ffffffff7d673b78  bln=22  avl=03  flg=05value=1204Bind#1oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=0 off=24kxsbbbfp=ffffffff7d673b90  bln=22  avl=02  flg=01value=800Bind#2oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi =00 siz=0 off=48kxsbbbfp=ffffffff7d673ba8  bln=22  avl=04  flg=01value=10001

como verificar se o trace está habilitado no oracle


Se você habilitou o rastreamento usando o pacote DBMS_MONITOR, podemos verificar se o rastreamento está habilitado usando a consulta abaixo
set lines 180col module for a45col sql_trace_waits for a20col sql_trace_binds for a20col sql_trace for a20select username,module,sid,sql_trace,sql_trace_waits,sql_trace_binds de v$session onde sql_trace='ENABLED'/

Se estiver habilitado por meio de outros métodos, a única maneira de verificar é olhar para o local do rastreamento e descobrir os arquivos de rastreamento que são recentes e, em seguida, encontrar o sid e o serial# nele e, em seguida, consultar v$session para encontrar o sessão e você pode desabilitar o rastreamento se quiser


Utilitário Oracle tkprof


Os arquivos de rastreamento obtidos do método acima estão em formato bruto que pode ser convertido em um formato mais legível usando o utilitário tkprof (utilitário TRANSient Kernel PROFile)
tkprofUsage:tkprof tracefile outputfile [explain=] [table=][print=] [insert=] [sys=] [sort=]table=schema.tablename   Use 'schema.tablename' com a opção 'explain='. explique=usuário/senha    Conecte-se ao ORACLE e emita EXPLAIN PLAN.print=integer    Listar apenas o primeiro 'inteiro' SQL statement.aggregate=yes|noinsert=filename  Listar instruções SQL e dados dentro de instruções INSERT.sys=no           TKPROF não lista SQL instruções executadas como usuário SYS.record=filename  Gravar instruções não recursivas encontradas no arquivo de rastreamento.waits=yes|no     Gravar resumo para quaisquer eventos de espera encontrados no arquivo de rastreamento.sort=option      Conjunto de zero ou mais das seguintes opções de classificação :prscnt  número de vezes que a análise foi chamadaprscpu  Tempo de CPU parsingprsela  tempo decorrido da análise    prsdsk  número de leituras de disco durante a análise prsqry  número de buffers para leitura consistente durante o parseprscu   número de buffers para leitura atual durante o parseprsmis  número de falhas no cache da biblioteca durante o parseexecnt  número de ex ecute foi chamado execpu  tempo de CPU gasto executando exeela  tempo decorrido executando exedsk  número de leituras de disco durante a execução exeqry  número de buffers para leitura consistente durante executeexecu   número de buffers para leitura atual durante executeexerow  número de linhas processadas durante executeexemis  número de erros de cache de biblioteca durante executefchcnt  número número de vezes que a busca foi chamadafchcpu  tempo de CPU gasto na buscafchela  tempo decorrido na buscafchdsk  número de leituras de disco durante fetchfchqry  número de buffers para leitura consistente durante fetchfchcu   número de buffers para leitura atual durante fetchfchrow  número de linhas fetcheduserid  userid do usuário que analisou o cursor

Alguns exemplos
tkprof file.trc file.txt sys=no explain=userid/password sort=prsela,exeela,fchelatkprof file.trc file.txt  sys=no explain=userid/password  sort=prsela,exeela,fchelatkprof file.trc file .txt sys=notkprof file.trc file.txt sys=no explain=userid/password sort=prsela,exeela,fchelaIsto print 10 sql apenas tkprof .trc elaps.prf sys=no explain=apps/ sort=(prsela,exeela,fchela) print=10Isto imprime todo o sql tkprof .trc elaps.prf sys=no Explain=apps/apps sort=prsela,exeela,fchela

Exemplo de conteúdo do arquivo tkprof
TKPROF:Release 11.2.0.4.0 - Produção em Ter, 17 de janeiro 14:12:41 2013Copyright (c) 1982, 2007, Oracle. Todos os direitos reservados.Arquivo de rastreamento:TEST_ora_15941.trcSort options:execpu  fchcpu**************************************** ********************************************count    =número de vezes OCI procedimento foi executadoCPU      =tempo de CPU em segundos executandoelapsed  =tempo decorrido em segundos executandodisk     =número de leituras físicas de buffers do diskquery    =número de buffers obtidos para leitura consistente atual  =número de buffers obtidos no modo atual (geralmente para atualização) linhas     =número de linhas processado pela chamada de busca ou execução******************************************** ************************************* ID SQL:6w82ggrtysxPlan Hash:2325776775SELECT FUNCTION_NAME    FROM FND_USER_DESKTOP_OBJECTS  WHERE USER_ID =:b1  AND APPLICATION_ID =:b2  AND  RESPONSIBILITY_ID =:b3  AND TYPE ='FUNCTION'  AND ROWNUM <=10 ORDER BY SEQUENCEcall     contagem       cpu    decorrido       disco      consulta    atual        linhas --- ------  ---- ---- ---------- ---------- ---------- ---------- ---------- Parse 1 0,00 0,00 0 0 0 0execute 1 0,00 0,00 0 0 0 0Fetch 2 0,00 0,00 0 4 0 1 ------- ----------- --- ---------- ---------- ---------- ----------  ------- --- Total 4 0,00 0,00 0 4 0 1Misses no cache da biblioteca durante a análise:0 Optimizer Modo:All_rowsparsing ID do usuário:173 (aplicativos) Número de estatísticas do plano capturadas:1rows (1st) linhas (avg) linhas (max) Operação da linha da linha- --------- ---------- ----------  ---------- ------------------------------1          1          1  ORDENAR POR (cr=4 pr=0 pw=0 time=0 us custo=6 tamanho=41 cartão=1)1          1          1   COUNT STOPKEY (cr=4 pr=0 pw=0 tempo=0 us)1          1          1    ACESSO À TABELA POR INDEX ROWID FND_USER_DESKTOP_OBJECTS (cr=4 pr=0 pw=0 tempo =0 custo americano=5 tamanho=41 cartão=1)1          1          1     INDEX RANGE S CAN FND_USER_DESKTOP_OBJECTS_N1 (cr=3 pr=0 pw=0 time=0 us cost=3 size=0 card=3)(object id 33596)Rows     Plano de Execução-------  --------- ------------------------------------------0  SELECT STATEMENT   MODO:ALL_ROWS1   SORT ( ORDER BY)1    COUNT (STOPKEY)1     TABLE ACCESS   MODO:ANALYZED (BY INDEX ROWID) OF'FND_USER_DESKTOP_OBJECTS' (TABLE)1      INDEX   MODO:ANALYZED (RANGE SCAN) OF'FND_USER_DESKTOP_OBJECTS_N1' (INDEX)Os tempos decorridos incluem a espera nos seguintes eventos:Evento em espera                             Vezes   Máx. Aguardar  Total de Espera ----------------------------------------   Aguardou  ------ ----  ------------ Mensagem SQL*Net para o cliente                       5        0,00          0,00 Mensagem SQL*Net do cliente                     5        0,00          0,00**************** **************************************************** **************SQL ID:276ut2ywquxPlan Hash:3856112528select object_name, icon_namefromfnd_desktop_objectscall     count       cpu    decorrido       disk      query    current        linhas ------- ------  ------ -- ---------- ---------- ---------- ----------  -------- -Parse 1 0,00 0,00 0 0 0 0execute 1 0,00 0,00 0 0 0 0Fetch 3 0,00 0,00 0 6 0 47 ------- ------ -------- ----- ----- ---------- ---------- ----------  ----------total        5      0,00       0,00          0 6          0          47Erros no cache da biblioteca d uring parse:0Modo do otimizador:ALL_ROWSParsing user id:173  (APPS)Número de estatísticas do plano capturadas:1Rows (1st) Rows (avg) Rows (max)  Row Source Operation---------- ----- ----- ----------  ----------------------------------- ----------------47         47         47  TABLE ACCESS FULL FND_DESKTOP_OBJECTS (cr=6 pr=0 pw=0 time=0 us cost=2 size=1175 card=47)Rows     Plano de Execução -------  ------------------------------------------- --------0  SELECT STATEMENT   MODE:ALL_ROWS47   TABLE ACCESS   MODE:ANALYZED (FULL) OF 'FND_DESKTOP_OBJECTS'(TABLE)

Oracle trcsess utilitário


Ao usar sessões de servidor compartilhadas, muitos processos estão envolvidos. O rastreamento referente à sessão do usuário está espalhado por diferentes arquivos de rastreamento pertencentes a diferentes processos. Isso torna difícil obter uma visão completa do ciclo de vida de uma sessão.
O utilitário trcsess consolida a saída de rastreamento de arquivos de rastreamento selecionados com base em vários critérios
trcsess  [output=output_file_name] [session=session_id] [clientid=client_id] [service=service_name] [action=action_name] [module=module_name] [trace_files]trcsess output=main.trc service=TEST  *trc  
Após a geração do arquivo de rastreamento consolidado, você pode executar o tkprof nele.

Mais informações

No 11g e superior, sql_trace também é um evento e pode ser definido com a sintaxe de evento:
SQL> oradebug doc nome do evento sql_tracesql_trace:evento para sql traceUsage-------sql_tracewait ,bind ,plan_stat ,nível 

Portanto, você pode usá-lo da seguinte maneira para habilitar SQL_TRACE solicitando informações de ligação:
alterar eventos de conjunto de sessão 'sql_trace bind=true';

ou vincular e aguardar informações (observe separados por vírgulas):
alterar eventos de conjunto de sessão 'sql_trace bind=true, wait=true';

O rastreamento adicional pode ser limitado a um conjunto de SQL_IDs se você incluir um filtro para ele. Por exemplo.
alterar eventos de conjunto de sessão 'sql_trace [sql:sql_id=g3yc1js3g2689 | sql_id=7ujay4u33g337]bind=true, wait=true';

10046 níveis de EVENTO:(os novos valores sql_trace estão incluídos em [..])
Estes são valores de bits, então podem ser colocados juntos para obter diferentes mixagens
1 – Ativar a funcionalidade SQL_TRACE padrão (Padrão)
4 – Como Nível 1 PLUS trace valores de ligação [bin=true]
8 – À medida que o rastreamento de nível 1 PLUS aguarda [ wait=true ]
Isso é especialmente útil para detectar espera de trava etc.
mas também pode ser usado para detectar varreduras de tabela completa e varreduras de índice.

A partir de 11g, esses níveis de bits adicionais estão disponíveis:
16 – Gerar dumps de linha STAT para cada execução [ plan_stat=all_executions ]
32 – Nunca despejar estatísticas de execução [ plan_stat=never ]

A partir de 11.2.0.2 este nível de bit adicional está disponível:
64 – Despejo adaptativo de linhas STAT. [ plan_stat=adaptive ]
Isso despeja as informações STAT se um SQL demorar mais de 1 minuto,
fornecendo informações para os SQLs mais caros e para diferentes execuções de tais
SQLs.

por exemplo:Um nível de evento comum é 12 que inclui saída SQL_TRACE padrão, ligações, esperas e rastreamento de linha STAT padrão.

Observações:
O dumping STAT foi alterado no 11g para que eles não sejam agregados em todas as execuções, mas sejam despejados após a execução. Isso foi feito para resolver os casos em que o cursor não está fechado e, portanto, as informações STAT não são despejadas.
Agora garantimos a captura das informações STAT após a execução. Veja os níveis de bit acima para ter um controle mais preciso sobre as linhas STAT.

Também lê
v$active_session_history
explicar o plano no Oracle
sql tuning Advisor