Quanto a reconstrução do índice de log irá gerar. Lembrei-me de que a leitura do índice de reconstrução deve gerar a mesma quantidade de arquivo de log que o tamanho da tabela. Mas meus testes estão mostrando o contrário. Precisamos dessa estimativa, pois estamos tentando criar índices de banco de dados do Azure e tem uma limitação de máx. 2 GB.
Meu banco de dados está em modelo de recuperação total.
Tamanho da mesa:
tamanho do registro:
pelas fotos, você pode ver que a geração de log foi muito menor com a operação de reconstrução de índice online. Alguém pode me corrigir se estiver faltando alguma coisa
Se você estiver reconstruindo um índice clusterizado, estará essencialmente reconstruindo a tabela, mas um índice não clusterizado é apenas um subconjunto da tabela (geralmente). Se você usar a opção SORT_IN_TEMPDB, descarregará parte do log para o log de transação tempdb . A versão também importa, em 2005 a reconstrução online é minimamente registrada , mas foi alterada para totalmente registrada em 2008. Você também pode querer dar uma olhada neste artigo que pode ser útil para decidir se deve reconstruir ou reorganizar com o tamanho do log em mente .
----Atualizar----
Usando a configuração de teste de Shanky, executei as mesmas etapas, mas adicionei algumas verificações de tamanho extras. Antes da reconstrução, realizo um backup de log e verifico o espaço e a utilização do log, bem como os registros no log de transações para o meu índice. Em seguida, faço o teste de reconstrução e verifico novamente o tamanho do log e o número de registros de log:
Eu tentei isso cerca de uma dúzia de vezes e cada vez que obtenho os mesmos resultados, o DMV está apenas informando sobre a transação, mas há várias transações aninhadas que são geradas como resultado da transação log_test que não aparece, incluindo o alocação de extensões e páginas e a inserção dos dados. Se você observar o conteúdo real do arquivo de log, poderá ver como a reconstrução offline é muito eficiente. Ele apenas aloca as páginas/extensões, formata-as e define-as e, em seguida, desaloca as antigas. Uma reconstrução online está fazendo muito mais trabalho, pois precisa manter o índice disponível durante a reconstrução. Isso provavelmente é mais evidente no bloqueio: offline ele bloqueia todo o objeto, mas online ele tem que ir página por página, chave por chave. Você pode dar uma olhada para comparar:
Você pode reduzir o log gerado alternando temporariamente para BULK_LOGGED enquanto a manutenção do índice é executada, mas perde a capacidade de fazer recuperação pontual para esse período de tempo. Aparentemente, também não reduz o backup de log .
-- Mais informações sobre o uso de log de DBCC SQLPERF (logspace) e SELECT LogRecordsGenerated = COUNT(*) FROM sys.fn_dblog(NULL, NULL) WHERE AllocUnitName = 'dbo.Logging.IX_LOGGING' para mostrar tamanhos reais de log, observe que o índice é apenas 648 KB
Este é o log depois de preenchê-lo com dados:
Nome do banco de dados Tamanho do log (MB) Espaço de log usado (%) Status
IndexLogging 14.99219 70.89956 0
LogRecordsGenerated
10903
Aqui está o log após um backup de log:
Nome do banco de dados Tamanho do log (MB) Espaço de log usado (%) Status
IndexLogging 14.99219 5.100313 0
LogRecordsGenerated
0
Log após backup de log e, em seguida, reconstrução online:
Nome do banco de dados Tamanho do log (MB) Espaço de log usado (%) Status
IndexLogging 14.99219 22.642 0
LogRecordsGenerated
11160
Log após backup de log e, em seguida, reconstrução offline:
Nome do banco de dados Tamanho do log (MB) Espaço de log usado (%) Status
IndexLogging 14.99219 10.79338 0
LogRecordsGenerated
140