Método para encontrar índices desnecessários de um banco de dados operacional do SQL Server?

Método para encontrar índices desnecessários de um banco de dados operacional do SQL Server?

Além de desperdiçar espaço no banco de dados, índices desnecessários no SQL Server podem retardar as operações de inserção e atualização. Os desenvolvedores que não têm experiência em princípios de banco de dados às vezes tendem a criar índices de tabelas que não fazem sentido para as consultas em execução.

Existe um procedimento ou ferramenta comum para o SQL Server 2005/2008 para analisar a carga de trabalho do banco de dados e dar dicas de quais índices nunca são usados ​​ou não são necessários em um determinado banco de dados operacional?

Obrigado!

Responder1

Estou vendo um script T-SQL bonitinho aqui (http://blog.sqlauthority.com/2008/02/11/sql-server-2005-find-unused-indexes-of-current-database/) para mostrar índices não utilizados que devem ser executados no SQL Server 2005. Outrohttp://aspadvice.com/blogs/ssmith/archive/2008/03/31/Find-Unused-SQL-2005-Indexes-for-Current-DB.aspxaqui também.

Parece que dm_db_index_usage_stats é a chave para tudo isso. Muito arrumado! (Verhttp://msdn.microsoft.com/en-us/library/ms188755.aspx Vou ter que dar uma olhada em alguns bancos de dados de produção que criei agora para ver como são essas estatísticas. (sorriso)

Editar: alguns antecedentes adicionais muito bons aqui:http://blogs.msdn.com/craigfr/archive/2008/10/30/what-is-the-difference-between-sys-dm-db-index-usage-stats-and-sys-dm-db- índice-operacional-stats.aspx

Responder2

Algumas coisas a ter em mente sobre o uso de sys.dm_db_index_usage_stats:

  1. A saída contém apenas índices que foram usados ​​desde a última vez que o banco de dados foi iniciado. Quando um banco de dados é encerrado, todas as entradas do cache de informações da memória desse banco de dados são removidas. Da mesma forma, o cache não sobrevive a uma reinicialização instantânea. Não há como limpar manualmente as entradas de um banco de dados específico sem reiniciar o banco de dados. Os vários artigos referenciados na primeira resposta (e também no meu blog) descrevem como capturar a saída em vários momentos para fazer análises de séries temporais.
  2. Não deixe de testar seuinteirociclo de negócios. Você não deseja remover um índice usado para um relatório de final de mês ou consulta ao CEO, mesmo que isso seja tentador.
  3. Certifique-se de compreender as várias contagens e o que elas significam antes de tomar uma decisão sobre se o índice está sendo usado de forma lucrativa ou simplesmente mantido às custas.

Espero que isto ajude.

PS Mais uma coisa para quem está lendo isso e se perguntando se existe um método equivalente para o SQL Server 2000 - não, nós (como eu estava na equipe na época) adicionamos o recurso apenas a partir de 2005.

Responder3

Temos um artigo wiki no SQLServerPedia com um script para fazer isso, além de um vídeo tutorial sobre como usá-lo:

Um para encontrar índices que não estão sendo usados:

http://sqlserverpedia.com/wiki/Find_Indexes_Not_In_Use

E outro para encontrar índices que você deve adicionar:

http://sqlserverpedia.com/wiki/Find_Missing_Indexes

Responder4

Fiz algumas consultas relacionadas ao índice e mostrei isso em meu blog (http://dbalink.wordpress.com/2008/11/09/how-to-finding-index-usage-stats-with-dmv-in-tsql/)

informação relacionada