Determinando que Índices em uma Tabela Não São Utilizados

12

Eu estive executando este script para tentar encontrar índices estranhos

select o.name as TableName, i.name as IndexName, p.reserved_page_count * 8.0 / 1024 as     SpaceInMB, s.*
from     sys.dm_db_index_usage_stats s
inner join sys.objects o on s.object_id = o.object_id
inner join sys.indexes i on i.index_id = s.index_id and i.object_id = o.object_id
inner join sys.dm_db_partition_stats p on i.index_id = p.index_id and o.object_id =      p.object_id
where o.name = TableName

Eu sei que quando last_user_seek / scan / lookup são todos nulos, que nenhum usuário usou o índice desde a última reinicialização. Mas eu estou querendo saber o que system_scans / pesquisas / procura ... são? Porque em uma determinada tabela eu encontrei 5 que não tinham atividade do usuário, mas uma tinha atividade do sistema há 10 dias. Alguém tem alguma idéia sobre quais varreduras / buscas / pesquisas de sistema podem ser? Essas tabelas parecem realmente super indexadas e eu gostaria de cortar a gordura.

Aushin
fonte
Postei a mesma pergunta no sqlservercentral e obtive respostas lá também. O link para o tópico é: sqlservercentral.com/Forums/Topic1205983-391-3.aspx?Update=1
Aushin
Relacionados: dba.stackexchange.com/q/56/2660
Nick Chammas
@Aushin no link que você postou acima está levando a uma discussão extremamente confusa, cheia de sentimentos e missões secundárias que ninguém realmente quer seguir.
Magier

Respostas:

10

Manutenção do índice (reconstrução / reorganização) e atividade do DBCC CHECKDB provavelmente, possivelmente atualizações de estatísticas. Alguma manutenção agendada configurada?

Se não houver acesso do usuário, bin-los. Lembre-se do período de tempo em que você decide que eles não serão mais usados. Existem tarefas de relatórios semanais ou mensais, por exemplo?

Enquanto procura, procure também índices duplicados .

Editar: sobre o link SSC

A partir de uma rápida varredura no tópico, parece que o pessoal do SSC tinha pensamentos semelhantes. No entanto, eles estão adotando uma postura mais cautelosa quanto ao possível uso "ocasional" desses índices, assumindo a posição de que alguém os colocou ali por uma razão, um argumento perfeitamente razoável. O contra-argumento é que, com muita frequência, é exatamente o oposto: alguém os colocou lá porque pensavam que era a coisa certa a fazer, mas por falta de entendimento ou falta de teste, não era.

Trouxe alguns sistemas de volta ao limiar, sem fazer nada além de eliminar índices não utilizados e duplicados. A indexação excessiva pode causar caos.

É o seu sistema, você precisa entender e ponderar os riscos de deixar esses índices no lugar ou descartá-los. Se você decidir prosseguir com a queda, documente o que faz, por que está fazendo, escreva os índices e publique para todas as partes interessadas.

Mark Storey-Smith
fonte
+1 nisso - tenho certeza de que são essas atividades que Mark mencionou. Nada que deveria lhe interessar - expandi-o em uma resposta adicional abaixo.
Mike Walsh
Obrigado por isso. Eu também tive uma discussão sobre sqlservercentral sobre isso. Vou postar o link para o que eles disseram na minha pergunta original.
Aushin
9

Glenn Berry escreveu ótimos scripts para ajudá-lo a encontrar os índices ausentes. Eu sugiro usar os scripts dele que tiram parte do trabalho de adivinhação da tarefa para você. Esses scripts não estão apenas procurando pesquisas / varreduras / pesquisas nulas ou 0 de usuários, mas também procurando índices que tenham uma grande variação entre a atividade de leitura e a atividade de gravação, possivelmente ainda resultando em melhor desempenho geral ao cair. Eu verificaria os scripts dele - você pode começar neste post .

Eu não estaria preocupado com a atividade do sistema. Isso não é algo que piorará se você remover os índices; na verdade, pode ser uma atividade que só acontece nesse índice porque existe. A principal coisa com a qual você se importa é a atividade de leitura do usuário e a atividade de gravação do usuário, além de equilibrar isso.

Mike Walsh
fonte
5

Lembre-se de que os índices também fornecem informações úteis ao Query Optimizer, mesmo que não sejam usados. Fiz várias coisas sobre o impacto da exclusividade, por exemplo. Se você remover um índice exclusivo porque não possui buscas ou verificações, ainda poderá afetar adversamente o desempenho.

Rob Farley
fonte
Ótimo ponto e acredito que os scripts de Glenn buscam restrições únicas. Se não for dele, talvez um cenário diferente, vou ter que pesquisar isso.
Mike Walsh
0

Além do que todos declararam, os índices em relação às colunas do FK referenciadas podem nunca mostrar buscas ou varreduras, mas são usados ​​nos bastidores.

Jeremy Lowell
fonte