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