none
Mesma consulta com plano de execução diferente entre 2 BD's RRS feed

  • Pergunta

  • Ola pessoal.

    Eu sei que planos de execução podem ficar diferente entre 2 usuários que utilizam a mesma estrutura de BD, pelos dados, ambiente, etc.

    Porém, gostaria de entender o que quer dizer isso:


    Exatamente a mesma consulta.

    Em um dos casos ficou bem "claro" o que o mecanismo fez, e sugeriu criação de um índice faltante.

    No outro caso, fez bitmaps, paralelismo, (me falta conhecimento para saber o que é), e não sugere índice.

    mas queria entender, de forma resumida , (se é que isso é possível) porque a consulta gera planos com essa diferença?

    Outro detalhe: o campo relacionado ao índice na TAB_Clientes "IDX_CodRotas" em  nenhum momento é envolvido em nada na consulta, por que ele é utilizado? é algo tipo "preciso de um índice , não encontrei um específico para a situação, e este foi o primeiro que encontrei"?

    Obrigado !!


    Julio C.

    quinta-feira, 15 de outubro de 2020 12:38

Respostas

  • Olá Julio,

    Sim , o paralelismo é bom .  Ele consome mais da maquina , mas, se a maquina é capaz de entregar é bom sim . 

    Faça a atualização das estatísticas do Banco de Dados. Essa talvez seja a questão para não estarem com planos iguais. é claro que outros fatores como a quantidade de dados influenciam muito.


    Se esta resposta lhe ajudou, marque-a como útil para que outra pessoa com dúvida ou problema semelhante possa encontrar resposta ou ajuda mais facilmente. * Jefferson Clyton Pereira da Silva - [ MCSA | MCP | MCTS | MTA | Analista de Banco de Dados - Sql Server e Oracle ]

    • Marcado como Resposta Julio Costi terça-feira, 20 de outubro de 2020 12:31
    segunda-feira, 19 de outubro de 2020 19:41

Todas as Respostas

  • Olá Julio,

    No caso , você disse que os bancos são iguais. Como assim iguais? 

    Um deles é de teste ou algo assim ?  Por que se a querie for executada em bancos diferentes, existe a questão da quantidade de dados entre eles, a atualização das estatísticas e etc, podem fazer esta diferença entre eles. 


    Se esta resposta lhe ajudou, marque-a como útil para que outra pessoa com dúvida ou problema semelhante possa encontrar resposta ou ajuda mais facilmente. * Jefferson Clyton Pereira da Silva - [ MCSA | MCP | MCTS | MTA | Analista de Banco de Dados - Sql Server e Oracle ]

    quinta-feira, 15 de outubro de 2020 16:05
  • Ola, Jefferson

    Quis dizer que tem exatamente a mesma estrutura, chaves, índices, ...

    Mas sim, em relação a dados , são diferentes.

    Na verdade, eu estava analisando esse plano para ver o que o mecanismo está fazendo, para tentar otimiza-lo, e o que eu não entendi foi , por que um plano ficou mais simples (que consegui compreender 100%, e nesse caso, saberia por que caminho ir para tentar otimizar) e no outro caso, criou esses bitmap e paralelismos.

    Me falta conhecimento.

    O BD cujo plano de execução ficou mais complexo , é bem maior, tem bem mais dados  nas tabelas.


    Julio C.

    quinta-feira, 15 de outubro de 2020 16:57
  • Em ambos os casos , com o plano baseado nos índices atuais, o mecanismo fez index scan na chave primaria de uma tabela grande , de movimentação (o que é esperado, pelos índices que tem).

    O que mais me intrigou é como o plano gerado no BD grande não gerou uma sugestão de índice ausente, enquanto o do BD pequeno, gerou.


    Julio C.

    quinta-feira, 15 de outubro de 2020 17:29
  • Olá Julio, 

    Entendi. 

    Bom, no caso pelo tamanho da base ser diferente isso já pode dar uma sinal da motivo das mudanças de opções no plano. 

    Porém, verifique se as bases estão com estatísticas atualizadas.  Caso não estejam, faça uma atualização e veja se os resultados irão se manter.

    Sobre o índice, o motivo pode ser justamente pelo retorno dos dados que a querie em si retorna. 

    Talvez o banco com muitos dados prefira fazer um scan mesmo fazendo o 'where'.


    Se esta resposta lhe ajudou, marque-a como útil para que outra pessoa com dúvida ou problema semelhante possa encontrar resposta ou ajuda mais facilmente. * Jefferson Clyton Pereira da Silva - [ MCSA | MCP | MCTS | MTA | Analista de Banco de Dados - Sql Server e Oracle ]

    quinta-feira, 15 de outubro de 2020 18:31
  • Pode ser mesmo.  otimizador preferiu fazer um scan.

    mas, SE eu criar o índice como sugerido pela execução do plano  do BD "menor", a consulta fica bem melhor (mais rapida e com menos leituras) mesmo no BD "maior".

    (Pode ser que o custo da manutenção do índice seja um problema, mas daí é outra história)

    Esses bitmap e paralelismo é "normal" que se crie? não seria indicativo de algo que estaria não-otimizado?


    Julio C.

    sexta-feira, 16 de outubro de 2020 11:27
  • Olá Julio,

    O que ocorre é que de acordo com os dados da tabela o plano de execução pode (e até deve) variar. Como são dados diferentes o plano de execução muda. 

    Você chegou a fazer a atualização das estatísticas dos BDs? Isso é super importante para que o Banco possa fazer uma boa análise e gerar planos de execução otimizados.

    Sobre o paralelismo é normalmente usado e costuma ser uma boa opção visto que o BD consegue maximizar o desempenho utilizando-se dos núcleos de CPU. 

    Outra questão as 2 bases estão na mesma instancia ? 


    Se esta resposta lhe ajudou, marque-a como útil para que outra pessoa com dúvida ou problema semelhante possa encontrar resposta ou ajuda mais facilmente. * Jefferson Clyton Pereira da Silva - [ MCSA | MCP | MCTS | MTA | Analista de Banco de Dados - Sql Server e Oracle ]

    sexta-feira, 16 de outubro de 2020 13:18
  • As duas estão na mesma instancia, um SQL Server 2019 developer.

    Ah entendi, então o paralelismo é "bom".


    Sim, foram recriados todos os índices e feito update statistics.

    Então, eu dropei e recriei o índice específico, para verificar o comportamento.

    CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
    ON [dbo].[TAB_Notas] ([Situacao],[EmissaoPropria],[Modelo])
    INCLUDE ([CodClientes],[CodNaturezaOperacao],[NFeProtocoloEnvio])

    Estou pensando no custo desse índice... se valeria a pena o BD manter esse índice, que é bem específico, ou deixar que faça o clustered scan.

    Apesar de que , quando crio, o mecanismo o utiliza, e fica consideravelmente mais rápido (mesmo no BD onde não houve a sugestão de criação), mas nesse caso não cria o paralelismo no plano.

    (só para deixar claro, nao estou criando índices apenas conforme é sugerido no plano, há uma verificação para qualquer situação)


    Julio C.

    sexta-feira, 16 de outubro de 2020 22:14
  • Olá Julio,

    Sim , o paralelismo é bom .  Ele consome mais da maquina , mas, se a maquina é capaz de entregar é bom sim . 

    Faça a atualização das estatísticas do Banco de Dados. Essa talvez seja a questão para não estarem com planos iguais. é claro que outros fatores como a quantidade de dados influenciam muito.


    Se esta resposta lhe ajudou, marque-a como útil para que outra pessoa com dúvida ou problema semelhante possa encontrar resposta ou ajuda mais facilmente. * Jefferson Clyton Pereira da Silva - [ MCSA | MCP | MCTS | MTA | Analista de Banco de Dados - Sql Server e Oracle ]

    • Marcado como Resposta Julio Costi terça-feira, 20 de outubro de 2020 12:31
    segunda-feira, 19 de outubro de 2020 19:41