Eu criei um script que é executado todas as noites para reconstruir e reorganizar índices com base na fragmentação, índices com fragmentação > 30% são reconstruídos, índices com fragmentação 10% - 30% são reorganizados.
Depois de executar o script, notei que temos cerca de 400 índices que ainda refletem uma contagem de fragmentação de> 10% e, após mais investigações, encontrei algumas postagens que mencionavam que quaisquer índices com uma contagem de páginas <1000 não seriam reorganizados pelo SQL .
Investiguei mais por que meu script não estava atualizando todos os meus índices e descobri que os resultados da consulta
sys.dm_db_index_physical_stats(DB_ID(DB_NAME()),NULL,NULL,NULL, 'DETAILED')
mostre as contagens de página de 5, 6 para tabelas com mais de 1 milhão de registros, a coluna record_count tinha cerca de 16.000 registros, então forcei uma reconstrução de índice no índice executando
ALTER INDEX [indexname] ON [schema].[table] REBUILD WITH (FILLFACTOR = 85, STATISTICS_NORECOMPUTE = OFF)
e meu índice agora mostra 1 moinho + contagem de registros.
Minha pergunta é: por que uma reorganização do índice não corrigiria a contagem de registros no índice e a fragmentação e o que faria com que esse valor de contagem de registros ficasse tão desatualizado no índice em primeiro lugar?
Meu plano agora é forçar uma reconstrução de todos os índices hoje à noite e, em seguida, executar meu script normalmente daqui para frente. Devo me preocupar com a contagem de registros de índice ficando desatualizada novamente?
Reorganizar um índice não atualiza as estatísticas em um índice. A reorganização garantirá que a árvore B+ seja balanceada, pois o SQL Server não faz o balanceamento automático das árvores durante a operação. A reconstrução de um índice recriará o índice, permitindo que o mecanismo atualize as estatísticas em um índice.
Você deve considerar a reorganização e atualização periódica das estatísticas em consultas levemente fragmentadas, desde que você possa poupar o tempo de manutenção. Você também pode tentar atualizar as estatísticas periodicamente usando amostras, se seus dados forem homogêneos o suficiente.
Você pode ler mais sobre as estatísticas de atualização aqui
http://msdn.microsoft.com/en-us/library/ms187348.aspx
Kimberly Tripp bloga fortemente sobre manutenção de índices em http://sqlskills.com
Confira seus links para Estatísticas e Índices.
Obrigado por suas respostas, acabei usando um script de lá
http://ola.hallengren.com/
Deve ter sido algo que meu script não estava atendendo, por exemplo, colunas xml, tudo está funcionando muito bem agora.
Às vezes, o índice e/ou as estatísticas não estão atualizados e os trabalhos de reindexação SQL não conseguem determinar se o índice está fragmentado ou não.
A execução
DBCC UPDATEUSAGE
prévia garantirá que os índices sejam recriados ou reorganizados de acordo com o nível de fragmentação.