Práticas recomendadas de índices não utilizados


11

Com base nesta consulta, se houver uma quantidade baixa de leituras totais (muito próximas de 0 ou 0, como 1 ou 2) e uma quantidade alta ou moderada de atualizações do usuário (não foi possível encontrar inserções ou exclusões nesta consulta) com uma grande contagem de linhas, eu deveria, em teoria, remover o índice.

SELECT DISTINCT
    OBJECT_NAME(s.[object_id]) AS ObjectName
       , p.rows TableRows
       , i.name AS [INDEX NAME]
       , (user_seeks + user_scans + user_lookups) AS TotalReads
       , user_updates UserUpdates
FROM sys.dm_db_index_usage_stats s
    INNER JOIN sys.indexes i ON i.[object_id] = s.[object_id] 
        AND i.index_id = s.index_id 
    INNER JOIN sys.partitions p ON p.object_id = i.object_id
WHERE OBJECTPROPERTY(s.[object_id],'IsUserTable') = 1
       AND s.database_id = DB_ID()
       AND i.name IS NOT NULL
ORDER BY (user_seeks + user_scans + user_lookups) ASC

Quero verificar aqui a precisão dessa suposição. Por exemplo, um índice que existe há mais de um ano, mas nunca foi lido, mas altamente atualizado, parece que seria uma má idéia. Existe um cenário em que essa suposição é inválida?

Respostas:


15

Este DMV mantém apenas estatísticas desde a última reinicialização do SQL Server; a vista é completamente destruída e tudo começa do zero.

Mais importante, as linhas nesta exibição para qualquer índice específico são removidas quando esse índice é reconstruído (mas não quando é reorganizado). Se você estiver executando uma manutenção regular do índice, pode ser útil examinar os logs de manutenção e verificar se algum dos índices que você está pensando em remover pode ter sido reconstruído recentemente.

Portanto, tomar decisões com base em leituras baixas desde a última reinicialização, quando a última reinicialização pode ter ocorrido nas atualizações de terça-feira do patch da semana passada ou no service pack de ontem, pode não ser aconselhável. Ou quando você estiver executando a manutenção de índice, desde a última reconstrução. Pode haver um relatório que é executado apenas uma vez por mês, ou uma vez por trimestre, ou uma vez por ano, e é executado por uma pessoa importante e impaciente.

Além disso, pode haver um índice para algo que acontecerá no futuro que você não conhece - uma série de relatórios sendo preparados para a temporada fiscal, digamos.

Então, meu conselho é:

Use o DMV para identificar índices candidatos a serem removidos , mas não tome essa decisão em um balão - você precisa fazer o trabalho braçal para determinar por que um índice pode existir antes de soltá-lo, mesmo que pareça que ele não está sendo usado no momento .


@AaronBertrand Então, acompanhar um histórico (junto com a hora do último reinício) seria uma boa adição a isso? Obrigado pela resposta.
DoubleVu 03/02

11
@DoubleVu sim, é provável que valha a pena manter instantâneos do histórico de uso do índice, para que você possa tomar decisões educadas que não sejam afetadas por nada que possa alterar a saída da DMV das estatísticas de uso.
Aaron Bertrand

2

Sim, a visualização possui apenas estatísticas desde a última reinicialização. Para ajudar a atenuar a configuração de um trabalho que executava uma consulta como a que você postou mensalmente pela manhã antes de nossa janela de manutenção começar a capturar as informações todos os meses antes da reinicialização do servidor. Isso me permitiu voltar ainda mais e analisar as tendências ao longo do tempo. Eu também tive uma segunda consulta que foi executada procurando possíveis índices ausentes.

Outra coisa a considerar é quais outros índices estão em cima da mesa. Pode não estar sendo usado porque é quase todo ou completamente uma duplicata de outro índice. Sim. O servidor SQL permite criar dois índices diferentes, mas idênticos, para que seja completamente redundante.

Você também pode ver como o plano de consulta pode acabar sendo uma consulta que usou esse índice se esse índice foi removido. Teria outro índice para usar ou provavelmente retornaria a uma verificação completa da tabela.

Os índices acabam sendo tanto arte quanto ciência, porque é realmente difícil saber tudo sobre o que pode ser executado e, de qualquer maneira, acaba mudando com frequência.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.