eu tenho uma mesaTableA
ID PK BIGINT
TrxID BIGINT
CardBalance INT
AccountBalance INT
SP_SPACEUSED 'TableA'
resultado:
name rows reserved data index_size unused
TableA 904054184 55547120 KB 34661408 KB 19963544 KB 922168 KB
Portanto, o tamanho dos dados é de cerca de 33 GB. Há um índice clusterizado no TrxID. Há um índice não clusterizado, que chega a cerca de 19 GB.
O tamanho do meu arquivo de log de transações é de cerca de 250 GB. DBCC SQLPERF('logspace')
mostra < 1% de uso.
Quando eu corro:
ALTER INDEX CIX_TableA_TrxID ON dbo.TableA REBUILD WITH (ONLINE = ON)
O log de transações atinge 100% após cerca de 20 minutos e continua a crescer.
Existe uma maneira confiável de calcular quanto espaço de log é necessário para esta operação?
Além disso, parece muito espaço para usar no arquivo de log, parece certo?
- Este banco de dados está em um Grupo de Disponibilidade (portanto, usando o modelo de recuperação completa) com 1 outra réplica assíncrona.
- Este é um banco de dados de teste, portanto, não há nenhuma outra transação em execução ao mesmo tempo que a reindexação.
Depois de entrar em contato com Paul Randal, da SQLSkills , ele me informou que o motivo das altas taxas de uso do log de transação é que, em uma
ONLINE
reconstrução/criação de índice, cada linha tem seu próprio registro de log com toda a sobrecarga de um registro de log. UmaOFFLINE
reconstrução registra imagens completas de página de 8 KB, não linha por linha.Link relacionado fornecido por Paweł Tajs:
SQL Q&A: The Lore of Logs (também por Paul Randal)