Quanto tempo demora a reindexação no SQL Server?

6

Eu herdei um banco de dados muito grande e muito confuso recentemente e preciso limpá-lo. Para dar uma idéia do tamanho, o banco de dados primário contém atualmente três grandes tabelas, cada uma com cerca de 300 milhões de linhas e ocupa cerca de 225 GB de espaço de armazenamento. Mais de 5 milhões de linhas são adicionadas a cada dia.

Devido a uma escassez crítica de espaço em disco (o predecessor não arquivou dados antigos nem gerenciava seu tamanho), fui forçado a excluir cerca de 280 milhões de linhas da maior tabela. Esse processo levou mais de 25 horas para ser concluído e o banco de dados precisou ser cortado dos aplicativos voltados para o cliente durante esse período.

Agora, preciso reindexar a tabela porque as seleções e inserções demoram muito tempo. No entanto, não posso simplesmente deixar o banco de dados offline indefinidamente, preciso ser capaz de estimar o tempo necessário para executar a reindexação. Eu nunca reindexei uma mesa tão grande antes, então eu realmente não tenho nenhum bom ponto de referência para usar.

A tabela principal inclui uma chave primária monotonicamente crescente em cluster e uma chave não-agrupada não exclusiva também. Eu tenho bastante espaço em disco disponível para executar a reindexação.

Então, minha pergunta é: quanto tempo as pessoas acham que isso vai me levar? O que é uma boa regra para estimar o tempo de reindexação?

    
por Whiteknight 12.11.2009 / 18:30

4 respostas

1

Não há maneira de estimar quanto tempo levará - tantas coisas diferentes teriam impacto. Semelhante a que Paul escreve sobre o comprimento de um CHECKDB , coisas muito semelhantes entrariam em jogo com a indexação e muito mais. A melhor resposta seria quanto tempo demorou no passado? Se você não conseguir determinar isso, a próxima melhor opção provavelmente será testá-lo em um ambiente de não produção semelhante, mas nem isso corresponderá necessariamente (ou seja, preocupações de concorrência etc. seriam diferentes).

Como uma nota lateral, você pode querer olhar para OPERAÇÕES DE ÍNDICE ONLINE no Sql 2005 e acima ... Eu não posso adicionar um segundo hiperlink, mas google "servidor de sql de operações de índice online" e clique no link superior. / p>     

por 12.11.2009 / 18:45
3

Você realmente verificou a fragmentação de suas tabelas / índices? Tente executar a consulta a seguir no banco de dados (a consulta é executada no SQL2005 ou superior). Observe que essa consulta afetará seu servidor e deverá ser executada em um momento de inatividade:

SELECT    OBJECT_NAME(i.OBJECT_ID) AS TableName,
        i.name AS IndexName,
        indexstats.avg_fragmentation_in_percent
FROM    sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') indexstats
        INNER JOIN sys.indexes i ON i.OBJECT_ID = indexstats.OBJECT_ID
    AND i.index_id = indexstats.index_id

Você pode reindexar seletivamente as tabelas / índices mais fragmentados.

    
por 13.11.2009 / 00:39
1

Qualquer operação de banco de dados é altamente dependente do hardware em que você está executando.

Já que você diz que já cortou uma grande quantidade de linhas, não deve ser um problema executá-lo fora do horário de pico.

Você pode configurar a replicação e oferecer esse banco de dados a seus clientes enquanto limpa o antigo e o define como somente leitura, para que eles ainda possam obter os dados necessários.

    
por 12.11.2009 / 18:44
1

Uma vez que você tenha a tabela recriada inicialmente, você desejará configurar os trabalhos de manutenção para desfragmentar / reconstruir os índices periodicamente. Michelle Ufford aka @SQLFool tem um excelente conjunto de scripts para isso:

link

Você define os limites de quando deseja desfragmentar vs reconstruir. Ele detecta automaticamente quais índices ele pode ser reconstruído on-line e faz isso também, oferecendo alguns benefícios de tempo de atividade.

Lembre-se de que as operações de índice podem lançar uma grande quantidade de atividades no log de transações, o que pode realmente retardar os backups de espelhamento de banco de dados e de log de transações.

    
por 13.11.2009 / 03:31