Pular para o conteúdo
WaitScope Entrar Solicitar acesso (por e-mail) Menu

Documentação

Como gerar o trace Oracle 10046, enviar ao WaitScope, ler o relatório e achar a causa raiz do tempo de resposta.

Começar

  • Visão geral do WaitScopeO que o WaitScope lê, o que o relatório entrega e o que ele não faz: o perfil do tempo de resposta a partir do trace Oracle 10046 e de deadlock.
  • Primeira análise com o trace de exemploEnvie o trace sintético pela console, acompanhe o processamento e compare o tempo total, o perfil, o diagnóstico e o plano com o relatório de exemplo.

Gerar o trace

  • Ligar o trace com o DBMS_MONITORLigue o trace 10046 com esperas e sem binds por sessão, por client_id ou por serviço, módulo e ação, confira se ficou ligado e desligue no fim.
  • Escolher o nível do evento 10046Os níveis do evento 10046, qual deles o WaitScope precisa, como ligar e desligar com ALTER SESSION e os parâmetros que evitam trace sem tempo ou cortado.
  • Achar o arquivo de trace no servidorMarque o nome com tracefile_identifier, ache o caminho pelo V$DIAG_INFO ou pelo V$PROCESS e copie o .trc da pasta de trace do ADR para enviar.
  • Enviar o trace de um deadlock (ORA-00060)Ache pelo alert log o trace que o Oracle grava sozinho no ORA-00060, envie o arquivo e veja no relatório o grafo de espera, as sessões e o comando.
  • O que um trace 10046 contémOs dados que um trace 10046 leva, o que o WaitScope guarda no relatório e apaga depois da análise, e o que conferir no arquivo antes de enviar.

Enviar

  • Enviar traces pelo navegadorEnvie traces pela página Análises da console: arquivos ou pasta, envio em pedaços com retomada, a pergunta sobre o processo e a fila de processamento.
  • Enviar traces pelo app AndroidInstale o app pela página App Android da console, escolha arquivos ou pastas, receba traces de outros apps e envie em segundo plano, se quiser só no Wi-Fi.
  • Enviar traces pela APIEnvie um trace pela API v1 com o token do app: entrar, abrir o envio, mandar os pedaços de até 8 MiB, concluir e acompanhar a análise até o relatório.
  • Arquivos compactados e pastasFormatos aceitos no envio, pasta inteira, arquivos .trm, uma análise por arquivo de zip ou tar, compactado dentro de compactado e arquivo que não é trace.
  • Analisar vários traces juntosJunte numa análise só os arquivos da mesma operação, como os da troca de tracefile_identifier, e leia no cartão da coleta os arquivos e as sessões.
  • Limites e envio repetidoTamanho por envio, limite descompactado, análises na fila e guardadas, prazo do relatório e o que acontece quando o mesmo arquivo é enviado de novo.

Ler o relatório

  • Resumo: tempo total, período e ambienteO tempo total, o período, as chamadas, esperas e comandos e o ambiente do trace no alto do relatório, e como baixar o relatório ou excluir a análise.
  • Diagnóstico: os achados do relatórioOs achados apontam padrões que costumam explicar o perfil, em ordem de severidade, com a parte do tempo total e a página de cada código.
  • Perfil do tempo de respostaA tabela que divide o tempo total em CPU por tipo de chamada, eventos de espera e tempo não contabilizado, e o cartão que explica cada linha.
  • Classes de espera e SQL recursivoO perfil agrupado pela classe de espera do Oracle e o tempo do SQL recursivo, que um comando dispara em funções, triggers e no dicionário.
  • Comandos por componente e por classePara cada componente do perfil e cada classe de espera, os comandos que mais gastaram tempo nele, pelo perfil exclusivo de cada comando.
  • Comandos SQL por contribuiçãoA lista dos comandos do trace pela contribuição ao tempo total, com o tempo inclusivo, a profundidade, as execuções, as linhas e as leituras.
  • Detalhe do comandoA página de um comando: o peso no tempo total, o texto com os objetos em destaque, o perfil exclusivo, as chamadas e o SQL recursivo filho.
  • Plano de execução e operações em destaqueO plano das linhas STAT, com o tempo e as leituras próprios de cada operação, as operações em destaque e as linhas estimadas contra as reais.
  • Tipos de chamadaAs chamadas PARSE, EXEC, FETCH e CLOSE da sessão somadas por tipo, com CPU, duração, leituras, linhas e misses, como no total do tkprof.
  • Chamadas de nível 0 mais longasAs chamadas da aplicação que mais demoraram, com a CPU, o instante em que cada uma começou, a linha no trace e o comando de cada uma.
  • Distribuição de latênciaA duração de cada evento de espera e de cada tipo de chamada em faixas de potência de 10, para separar muitas ocorrências rápidas de poucas lentas.
  • Leituras: faixas de disco e SSD e releituraAs leituras de bloco em faixas pensadas para disco e para SSD, e quantas vezes a sessão leu de novo um bloco que já tinha lido no mesmo trace.
  • Objetos com mais espera e página do objetoOs objetos que mais somaram espera no trace e a página de cada um na console, com consultas prontas para rodar no banco do trace.
  • Textos compartilháveis: SQL sem bindOs comandos que só diferem nos literais, juntos numa forma com :s e :n no lugar dos valores, com as variantes, os PARSE e o tempo somados.
  • Deadlocks: grafo, sessões e diagnósticoComo ler o deadlock gravado no trace: quem esperava por quem, as sessões, a linha disputada, o SQL, a pilha PL/SQL e o diagnóstico pelo lock.
  • Erros ORA no traceOs códigos ORA- das linhas ERROR e PARSE ERROR do trace, o que cada um significa, onde apareceu e o link para a documentação da Oracle.
  • Coleta: vários arquivos analisados juntosO cartão que descreve a coleta quando vários traces foram analisados juntos: os arquivos, os trechos de cada um e o tempo de cada sessão.

Achar a causa raiz

  • O método do perfil do tempo de respostaComo achar a causa raiz de uma lentidão: escolher a operação, medir o tempo de resposta com o trace, atacar o maior componente e medir de novo.
  • Sessão esperando a aplicaçãoO achado TEMPO_NA_APLICACAO aparece quando a espera SQL*Net message from client ocupa boa parte do tempo total: o tempo está fora do banco.
  • Um componente domina o tempo de respostaO achado COMPONENTE_DOMINANTE aparece quando um só componente do perfil concentra a maior parte do tempo total. Veja por onde seguir em cada caso.
  • CPU domina o tempo de respostaO achado CPU_DOMINANTE aparece quando a CPU das chamadas concentra a maior parte do tempo total. Em geral, vem de leitura lógica em excesso ou de parse.
  • Tempo não contabilizado dentro das chamadasO achado NAO_CONTABILIZADO_DENTRO aparece quando muito tempo fica nas chamadas sem CPU nem espera: trace sem esperas, fila de CPU ou swap.
  • Lacunas de tempo entre chamadasO achado NAO_CONTABILIZADO_ENTRE aparece quando muito tempo cai entre chamadas sem espera registrada. Quase sempre, a falha está na medida.
  • CPU medida acima do tempo decorridoO achado CPU_ACIMA_DO_DECORRIDO aparece quando o tempo não contabilizado dentro das chamadas fica negativo. É efeito da medida de CPU, não do banco.
  • Leitura de bloco único lentaO achado LEITURA_LENTA aparece quando a leitura de um bloco único demora em média mais do que o armazenamento deveria. Veja se são todas as leituras ou poucas.
  • Muitas leituras de bloco únicoO achado MUITAS_LEITURAS aparece quando as leituras de bloco único ocupam boa parte do tempo total. Antes de acelerar o disco, veja se o plano lê blocos demais.
  • Muitos hard parsesO achado HARD_PARSE aparece quando boa parte dos PARSE da sessão é hard parse, ou quando o PARSE de SQL com literais pesa no tempo. A causa mais comum é SQL sem bind variables.
  • Um PARSE a cada execuçãoO achado PARSE_POR_EXECUCAO aparece quando um comando muito executado faz um PARSE a cada execução. Manter o cursor aberto evita o PARSE repetido.
  • SQL com literais em vez de bind variablesO achado LITERAIS_SEM_BIND aponta o mesmo SQL repetido com valores diferentes no texto, em muitas variantes cujo PARSE pesa na sessão. A correção é usar bind variables.
  • Muitos FETCH com poucas linhasO achado FETCH_PEQUENO aparece quando a aplicação faz muitos FETCH com poucas linhas cada, em média. Um fetch size maior corta idas e voltas.
  • Processamento linha a linha em PL/SQLO achado LINHA_A_LINHA aponta SQL recursivo executado ou lido muitas vezes, uma linha por vez: o laço em PL/SQL que pede processamento em conjunto.
  • Espera por bloqueio de outra sessãoO achado BLOQUEIO aparece quando a classe Application pesa no tempo total: como achar a sessão que segura o lock e corrigir a causa.
  • Disputa por estruturas internas do bancoO achado CONCORRENCIA aparece quando latches, mutexes e buffer busy pesam no tempo total: como ligar cada evento à causa e corrigir.
  • Muito tempo esperando a gravação do redo no commitO achado COMMIT aparece quando o log file sync pesa no tempo total: como separar commits demais de redo lento e o que fazer em cada caso.
  • Espera ligada à configuração do bancoO achado CONFIGURACAO aparece quando troca de redo log, buffer, ITL ou sequence pesam no tempo total: o evento diz o limite a ajustar.
  • Troca de blocos entre instâncias do RACO achado CLUSTER aparece quando os eventos gc pesam bastante no tempo total: instâncias do RAC disputando os mesmos blocos, e como reduzir as trocas.
  • Sessão contida pelo Resource ManagerO achado RESOURCE_MANAGER aparece quando as esperas resmgr pesam no tempo total: como achar o plano, o grupo e a janela que seguraram a sessão.
  • Operação do plano que concentra o trabalhoO achado PLANO_PONTO_QUENTE aponta a operação que concentra o tempo ou as leituras do plano de um comando pesado, com a pista do que corrigir.
  • Estimativa de linhas errada no planoO achado ESTIMATIVA_ERRADA mostra a operação em que o otimizador errou as linhas por 10 vezes ou mais, e como corrigir estatísticas e bind peeking.
  • Chamadas de nível 0 lentasO achado CHAMADAS_LENTAS conta as chamadas da aplicação que levaram 0,1 s ou mais e leva à lista das mais longas, de onde se chega ao comando.
  • Erros Oracle no traceO achado ERROS_ORACLE conta os erros ORA- gravados no trace, menos o ORA-01403: como ver onde cada código apareceu e o que corrigir.
  • ORA-01403 (fim de dados) no traceO achado FIM_DE_DADOS aparece quando o único erro do trace é o ORA-01403, fim normal de leitura. Veja os casos em que ele merece atenção.
  • Rollbacks no traceO achado ROLLBACK conta as transações que terminaram em rollback: como saber, pelo próprio trace, se houve trabalho desfeito ou só rotina do pool.
  • Deadlock entre sessões (ORA-00060)O achado DEADLOCK classifica cada ORA-00060 pelo tipo de lock do grafo (TX, TM ou UL) e aponta a causa provável e a correção de cada tipo.
  • Trace sem intervalo de tempoO achado TRACE_VAZIO aparece quando o arquivo tem linhas do 10046, mas nenhuma chamada ou espera com tim: não há tempo de resposta a analisar.

Estudos de caso

Limites e privacidade

  • O que o WaitScope não fazO que fica fora do alcance do WaitScope: conexão com o banco, monitoramento, os arquivos que ele recusa e o que um trace 10046 não consegue mostrar.
  • Retenção, exclusão e privacidade dos dadosQuanto tempo o relatório fica guardado, quando o trace é apagado, como excluir e baixar, quem vê as suas análises e como pedir ajuda sem mandar o trace.
  • Literais escondidos no SQLComo a máscara troca por *** o texto entre aspas e os números do SQL que você vê e baixa, o que ela não esconde e como ligar ou desligar cada opção.

Referência

  • GlossárioOs termos do relatório e do trace 10046 em ordem alfabética, do tempo de resposta e do componente ao hard parse, às leituras cr e cu e ao sql_id.
  • Linhas do trace 10046 que o WaitScope lêCada linha do trace 10046 que o WaitScope lê, com os campos que ele usa, os que ele ignora, a unidade de tempo e onde tudo aparece no relatório.
  • Referência da API v1Resumo da API v1 que o app Android usa: endereço, token, idioma, códigos de erro, rotas de sessão, conta, análises, relatório e envio, e os limites.
  • Novidades da console e do appO que mudou em cada versão da console e do app Android do WaitScope, da mais nova para a mais antiga, do HTML baixado que abre aos poucos da console 1.7.0 ao aceite dos termos da 1.5.0.

Relatar erro nesta página