Em que circunstâncias é uma boa ideia re-indexar as tabelas todas as noites?

5

Eu herdei vários sistemas SQL Server 2005 e 2008 (todos em execução no modo de recuperação Simples) que cada um faz as seguintes coisas todas as noites a partir de uma tarefa do SQL Agent:

  • Backup
  • Encolher
  • Reindexação

Eu parei o psiquiatra de acontecer, pois isso provavelmente está causando mais problemas do que está resolvendo. (O uso do servidor é armazenar uma quantidade consistente de informações em uma base contínua de 5 dias, para que o espaço das linhas excluídas seja usado novamente para obter novas informações sem muito crescimento).

No entanto, não sei se devo parar também o trabalho noturno de re-indexação. Foi necessário quando o encolhimento estava ativo por causa da fragmentação maciça do índice que causa encolhimento. Não consigo encontrar muita informação na Internet sugerindo quando um re-índice noturno pode ser sensato. Devo desabilitar isso também?

    
por Mark Hatton 15.09.2010 / 14:48

2 respostas

7

Se as informações estiverem rolando, isso indica que há uma grande parte, aproximadamente 20%, do total do DB sendo inserido todos os dias. Isso indica que suas estatísticas e seus índices estão 20% errados.

Isso parece exatamente as condições para as quais você deve voltar a indexar.

    
por 15.09.2010 / 14:52
1
Basicamente, o psiquiatra e a reindexação foram simplesmente desfazendo um ao outro (as tabelas de fragmentos de contração para recuperar espaço, então a reindexação usa espaço extra para desfragmentar as tabelas).

Então, como você removeu o psiquiatra, provavelmente também pode remover a reindexação noturna. (Ainda é provavelmente aconselhável ter uma reindexe completa semanal, na maioria dos casos.)

Mas, dados os cinco dias de dados, você pode realmente estar bem com NO REINDEXES em todas essas tabelas de rolagem (dependendo de como exatamente o índice clusterizado está configurado). Aqui está o que eu quero dizer:

Supondo que você insira somente (sem atualizações), e o índice clusterizado esteja na data / hora ou apenas um valor numérico perpetuamente crescente, o arranjo interno da tabela pode ser parecido com:

[  Day 1  ][  Day 2  ][  Day 3  ][  Day 4  ][  Day 5  ][  Empty  ]

No dia 6, você exclui os dados do dia 1 e insere os dados do dia 6:

[  Empty  ][  Day 2  ][  Day 3  ][  Day 4  ][  Day 5  ][  Day 6  ]

e o mesmo padrão continua, reutilizando o espaço recém-liberado:

[  Empty  ][  Day 2  ][  Day 3  ][  Day 4  ][  Day 5  ][  Day 6  ]
[  Day 7  ][  Empty  ][  Day 3  ][  Day 4  ][  Day 5  ][  Day 6  ]
[  Day 7  ][  Day 8  ][  Empty  ][  Day 4  ][  Day 5  ][  Day 6  ]
[  Day 7  ][  Day 8  ][  Day 9  ][  Empty  ][  Day 5  ][  Day 6  ]

Para saber com certeza se isso é o que está acontecendo, eu usaria as consultas de fragmentação de tabela do SQL (dm_db_index_physical_stats) depois de uma reindexação final e desativaria as reindexas por vários dias. Se os números de fragmentação são muito baixos, provavelmente é isso que está acontecendo. Se eles são altos, então isso provavelmente não é uma imagem precisa, e você pode precisar reintegrar suas reindexas.

    
por 15.09.2010 / 17:36