locked
Como saber qual índice não está sendo utilizado numa tabela ? RRS feed

  • Pergunta

  • Prezados,

    Estou com uma dúvida em relação ao SQL SERVER que é a seguinte :

    - Como saber quais índices de determinada base de dados não está sendo mais acessado. Sei que,a princípio, existem formas rápidas e fáceis de se saber isso a partir de consultas feitas a partir da DMV sys.dm_db_index_usage_stats cruzando com as informações de sys.indexes, porém o problema é que a DMV sys.dm_db_index_usage_stats é sempre reinicializada a cada "startup" do SQL SERVER e as informações constantes lá podem não ser fiéis à realidade, no caso de eu fazer a consulta poucos dias após o "startup" do SQL SERVER e um ou outro índice (geralmente usado) ainda não tiver sido utilizado.

    Neste caso, que tipo de consulta utilizar ? Que ferramentas usar para que eu possa ter, senão certeza absoluta, mas praticamente a certeza de que determinado índice realmente não está sendo utilizado.

    Isso é importante fazer, pois eliminar índices inúteis podem impactar positivamente na performance das operações de I/O, visto que a atualização do mesmo seria mais um tempo gasto sem necessidade.

    Agradeço antecipadamente a todos por quaisquer colaboração.

    José Luiz

    quarta-feira, 13 de julho de 2011 21:44

Respostas

  • José Luiz,

    A forma de verificar se um índice está ou não sendo utilizado é realmente através da DMV sys.dm_db_index_usage_stats e há esse "problema" dela coletar dados a partir do start do serviço do SQL.

    O que você poderia implementar para evitar erros ao retirar um índice seria criar uma rotina para coletar os dados da index_usage_stats, e periodicamente você verifica se determinado índice está sendo usado ou não. Dessa forma, você irá conseguir armazenar dados históricos e será mais preciso na hora de excluir um índice não utilizado por exemplo.

    Espero ter ajudado.

     

    Att.


    Erickson Ricci
    Microsoft MCP, MCTS SQL Server 2005, 2008
    Visite o meu blog: http://ericksonricci.wordpress.com
    Me siga no twitter: @EricksonRicci
    LinkedIN: http://br.linkedin.com/in/ericksonricci
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**
    sexta-feira, 15 de julho de 2011 15:33

Todas as Respostas

  • José Luiz,

    A forma de verificar se um índice está ou não sendo utilizado é realmente através da DMV sys.dm_db_index_usage_stats e há esse "problema" dela coletar dados a partir do start do serviço do SQL.

    O que você poderia implementar para evitar erros ao retirar um índice seria criar uma rotina para coletar os dados da index_usage_stats, e periodicamente você verifica se determinado índice está sendo usado ou não. Dessa forma, você irá conseguir armazenar dados históricos e será mais preciso na hora de excluir um índice não utilizado por exemplo.

    Espero ter ajudado.

     

    Att.


    Erickson Ricci
    Microsoft MCP, MCTS SQL Server 2005, 2008
    Visite o meu blog: http://ericksonricci.wordpress.com
    Me siga no twitter: @EricksonRicci
    LinkedIN: http://br.linkedin.com/in/ericksonricci
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**
    sexta-feira, 15 de julho de 2011 15:33
  • Ok, Erickson,

    Vou estudar sua proposta e tentar implementá-la de alguma forma.
    Obrigado pela sugestão.

    José Luiz

    terça-feira, 19 de julho de 2011 11:49