Pular para o conteúdo
  • Este tópico contém 4 respostas, 5 vozes e foi atualizado pela última vez 15 anos, 11 meses atrás por Ricardo Portilho Proni.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #93308
    mpungan
    Participante

      Alguém poderia me ajudar com esse select abaixo, para melhora-ló.

      SELECT EE.EVE_CDEVENTO “Codigo Evento”, EE.EVE_SEQUENCIA “Sequencia”,
      EE.EVE_DESCRICAO “Descricao”, FC.NOCURSO “Curso”
      FROM EX_EVENTOS EE, FA_CURSOS FC, EX_STATUS ST, EX_OPERADOR_CAT_EVE OCE
      WHERE EE.CDCURSO = FC.CDCURSO (+)
      and EE.STA_CODIGO = ST.STA_CODIGO
      AND EE.CEV_CODIGO = OCE.CEV_CODIGO
      AND OCE.NUOPERADOR = :1
      AND EE.EVE_DESCRICAO LIKE ‘%PEGA%’
      ORDER BY EE.EVE_CDEVENTO DESC, EE.EVE_SEQUENCIA DESC

      +———————–+———————————+—————-+——-+——–+————–+——-+————-+——————+————————+
      | Operação | Objeto | Tipo de Objeto | Ordem | Linhas | Tamanho (KB) | Custo | Tempo (seg) | Custo da CPU | Custo de Entrada/Saída |
      +———————–+———————————+—————-+——-+——–+————–+——-+————-+——————+————————+
      |SELECT STATEMENT | | | 7 | | | 148 | | | |
      | SORT ORDER BY | | | 6 | 213 | 21,841 | 148 | 2 | 22.732.883 | 145 |
      | HASH JOIN OUTER | | | 5 | 213 | 21,841 | 147 | 2 | 14.090.914 | 145 |
      | NESTED LOOPS | | | 3 | 213 | 15,809 | 140 | 2 | 9.137.414 | 139 |
      | TABLE ACCESS FULL | EXTENSAO.EX_EVENTOS | TABLE | 1 | 373 | 24,405 | 140 | 2 | 8.428.714 | 139 |
      | INDEX UNIQUE SCAN | EXTENSAO.XPKEX_OPERADOR_CAT_EVE | INDEX (UNIQUE) | 2 | 1 | 0,009 | 0 | | 1.900 | 0 |
      | TABLE ACCESS FULL | FAFINANC.FA_CURSOS | TABLE | 4 | 1.415 | 40,073 | 6 | 1 | 496.179 | 6 |
      +———————–+———————————+—————-+——-+——–+————–+——-+————-+——————+————————+

      #93313
      CleitonHanzen
      Participante

        Olá Amigo,

        Desculpe as palavras rudes e o mau-humor, mas acredito que aqui seja um fórum de profissionais Oracle e não fórum de pessoas com bola de cristal… 🙂 Se te “dermos” a solução, possívelmente você nunca vai evoluir e vai passar o resto da vida pedindo ajuda…. 😉

        Acho que seria bom criar alguns “templates” para este tipos de dúvidas (compilar as dicas/informações dos nossos membros top (alphamek, ishi, vieri, drbs….etc..etc.. desculpe se esqueci o nome de alguém…. rsrsrsrs)

        Mas assim, os passos que checo quando uma query está muito lenta:

        1. Analisar a estrutura de tabelas/índices, afim de identificar possíveis campos envolvidos nos “filtros” da query e que não sejam indexados (consequentemente fazendo leitura total da tabela e dependendo o caso, gerando a lentidão). (Aparentemente o teu problema parace ser este…rsrsrss)
        2. Caso existam os índices, como está a coleta de estatísticas da tabela? Estão atualizadas?

        Geralmente o primeiro passo resolve (não se esqueça de envolver os analistas do software e principalmente: teste num ambiente de homogalação antes, criação de índices pode melhorar consultas, mas pode deixar outros processos lentos, como deletes, por exemplo).

        []s

        #93316
        Ishii
        Participante

          Olá,

          Complementando os passos do Cleiton:

          Verifique se o MER tem realmente relacionamento entre as tabelas que se está construindo a query/consulta. Boa parte dos problemas de query estão ou na falta de um Modelo Adequado ou na falta de conhecimento desta estrutura por parte do Desenvolvedor.

          Acho que a idéia do fórum é uma orientação geral e distribuição de conhecimento mesmo. Consultorias individuais nem sempre são a melhor forma dessa “divisão de conhecimento”. Questões mais genéricas porém com uma profundidade tem uma maior chance de serem bem aceitas entre todos, isso no caso de construção de queries (por exemplo: usar o IN ou EXISTS, qual tem melhor performance, ou até como uso/interpreto o TKPROF etc.). Gostei muito da interação com relação ao bulk collect que foi algo meio individual porém de profundidade e interesse geral.

          No mais, vamos a luta filhos da pátria!

          []s Ishii

          #93336
          fsitja
          Participante

            Creio que nem se trata tanto de dar solução pronta. A questão é que não temos a definição completa do problema.

            Para fazer essa análise ajudaria muito postar as estruturas das tabelas, dados de exemplo (input e output esperado), explain plan e postar código formatado (usando tags de código [code] do fórum).

            Desculpe por não conseguir dar uma resposta, pois a formulação da pergunta precisa de mais detalhamento.

            #93351
            Ricardo Portilho Proni
            Participante

              Oi.

              O maior custo (a maior número das colunas COST) deste SQL está no Full Table Scan feito na tabela EE.
              O problema é o LIKE %AlgumaCoisa%. Ele sempre fará um FTS.
              Você só deve utilizar % no final da String.

              Troque isto:
              AND EE.EVE_DESCRICAO LIKE ‘%PEGA%’

              Por isto:
              AND EE.EVE_DESCRICAO LIKE ‘PEGA%’

              Para buscas por textos completos, se você precosar, o Oracle tem o Text Search.

              Abraço !

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.