none
Plano de Execução Estimado RRS feed

  • Pergunta

  • Pessoal, Bom Dia! 

    Como faço para entender o plano de execução estimado ?

    Monto, diariamente, muitas queries, e algumas delas ficam muito lentas, e sei que através do plano de execução é possível analisar e saber qual ação tomar para diminuir o tempo de resposta.

    Agradeço se alguém possuir material/link em português e puder disponibilizar.

    []´s

    Obrigado,

    Denison Soares

     

     


    []´s Obrigado, Denison Soares
    segunda-feira, 16 de maio de 2011 13:51

Respostas

  • Denilson,

     

    Desde o começo:

    O plano de execução de uma query é como o dataBase Engine ira processar a sua query, juntamente com o SO e com os HardWares disponiveis.

    Em relação a hardware são possiveis otimizações principalmente como por exemplo: separação de disco entre datafiles, logfiles, tempdb, raids dos discos, processador.

    Em relação ao SO, não ha muito o que ser otimizado, o mesmo só esta no meio uma vez que o SQL Server faz uma requisição ao SO que faz um acesso ao disco.

    Dentro da parte do SQL Server (DataBase Engine) existem muitas opções de melhorias, sendo que grande parte das mesmas podem ser vistar a partir do plano de execução.

    O plano de execução possui algumas "caixinhas" que explicam como a sua query foi processada.

    As principais são:

     - Full table Scan -> ou seja, para se encontrar o valor declarado no campo where de sua query, foi necessario ler toda a tabela, este tipo deve ser evitado a todo custo com a criação de indices, se voce ver isso em seu plano de execução, saiba que algo esta faltando! rs....

    - Index Scan -> utilizado o indice clustered da primary key cujo qual ordena sua tabela, vamos supor que voce possua uma tabela com os campos ID e NOME_FUNCIONARIO, seu campo ID é uma primary key, por default o SQL Server criara um indice cluster neste campo.

    Ao se roda a query: SELECT * FROM TABELA

    Voce vera que a caixinha utilizada foi uma chama Index Scan, o que quer dizer que ele leu a tabela a partir de um indice, o que melhorou todo seu desempenho.

    - Index Seek -> Esta opção é quando voce utiliza algum campo no campo WHERE de sua query e existe um indice apropriado para isso.

     

    Essas são as principais, existem algumas outras que são interessantes, sendo elas:

    Hash -> Agregação de informações para resolver a sua query caso o indice utilizado não possua included tables a ponto de cubrir 100% da query rodada.

    Sort -> Ordenação, provavelmente a ação mais demorada e custosa para o SQL Server em uma query

     

    lembre-se que é interessante saber a teoria para poder melhorar sua performance, exemplo: Para a redução de ID, crie um FileGroup separado, e coloque seu Datafile em um disco a parte do disco de data, mas lembre-se que o indice cluster deve ficar no mesmo filegroup que a tabela, pois se voce mover o indice cluster para o filegroup de indices, a tabela sera movida tambem.

     

    Uma vez que voce constatou que existem querys lentas rodando diariamente, selecione essas queryes, execute-as e melhore seu plano de execução.

    Algumas diferenças sutis em sua query alteram seu plano de execução e sua performance.

    Exemplo: Evite o uso de DISTINCT, Subquerys no select podem ser muito pesadas uma vez que para cada linha de retorno, essa subquery sera executada.


    Oracle OCA11g, MCC 2011! Dicas e novidades: www.fabrizziocaputo.wordpress.com
    segunda-feira, 16 de maio de 2011 14:36
    Moderador

Todas as Respostas

  • Denilson,

     

    Desde o começo:

    O plano de execução de uma query é como o dataBase Engine ira processar a sua query, juntamente com o SO e com os HardWares disponiveis.

    Em relação a hardware são possiveis otimizações principalmente como por exemplo: separação de disco entre datafiles, logfiles, tempdb, raids dos discos, processador.

    Em relação ao SO, não ha muito o que ser otimizado, o mesmo só esta no meio uma vez que o SQL Server faz uma requisição ao SO que faz um acesso ao disco.

    Dentro da parte do SQL Server (DataBase Engine) existem muitas opções de melhorias, sendo que grande parte das mesmas podem ser vistar a partir do plano de execução.

    O plano de execução possui algumas "caixinhas" que explicam como a sua query foi processada.

    As principais são:

     - Full table Scan -> ou seja, para se encontrar o valor declarado no campo where de sua query, foi necessario ler toda a tabela, este tipo deve ser evitado a todo custo com a criação de indices, se voce ver isso em seu plano de execução, saiba que algo esta faltando! rs....

    - Index Scan -> utilizado o indice clustered da primary key cujo qual ordena sua tabela, vamos supor que voce possua uma tabela com os campos ID e NOME_FUNCIONARIO, seu campo ID é uma primary key, por default o SQL Server criara um indice cluster neste campo.

    Ao se roda a query: SELECT * FROM TABELA

    Voce vera que a caixinha utilizada foi uma chama Index Scan, o que quer dizer que ele leu a tabela a partir de um indice, o que melhorou todo seu desempenho.

    - Index Seek -> Esta opção é quando voce utiliza algum campo no campo WHERE de sua query e existe um indice apropriado para isso.

     

    Essas são as principais, existem algumas outras que são interessantes, sendo elas:

    Hash -> Agregação de informações para resolver a sua query caso o indice utilizado não possua included tables a ponto de cubrir 100% da query rodada.

    Sort -> Ordenação, provavelmente a ação mais demorada e custosa para o SQL Server em uma query

     

    lembre-se que é interessante saber a teoria para poder melhorar sua performance, exemplo: Para a redução de ID, crie um FileGroup separado, e coloque seu Datafile em um disco a parte do disco de data, mas lembre-se que o indice cluster deve ficar no mesmo filegroup que a tabela, pois se voce mover o indice cluster para o filegroup de indices, a tabela sera movida tambem.

     

    Uma vez que voce constatou que existem querys lentas rodando diariamente, selecione essas queryes, execute-as e melhore seu plano de execução.

    Algumas diferenças sutis em sua query alteram seu plano de execução e sua performance.

    Exemplo: Evite o uso de DISTINCT, Subquerys no select podem ser muito pesadas uma vez que para cada linha de retorno, essa subquery sera executada.


    Oracle OCA11g, MCC 2011! Dicas e novidades: www.fabrizziocaputo.wordpress.com
    segunda-feira, 16 de maio de 2011 14:36
    Moderador
  • Denilson,

    Segue link de um "livro" em pdf  falando sobre Planos de Execução (Ingles)...

    http://downloads.sqlservercentral.com/Books/dissecting_complete.pdf?utm_source=ssc&utm_medium=weblink&utm_content=Grant&utm_campaign=sqltoolbelt

    att.
    RAfael Melo

     

     

    segunda-feira, 16 de maio de 2011 16:46