Estou procurando uma explicação para um instantâneo de replicação ser superior a 5 vezes o que estamos prevendo
Após uma falha de replicação, estamos tentando reinicializar as assinaturas com um novo instantâneo. O tamanho do banco de dados é de 135 GB, uma tabela dentro do banco de dados é de 60 GB - excluímos este artigo da publicação. Isso significava que tínhamos uma expectativa de que o tamanho do snapshot fosse de aproximadamente 75 GB.
Fizemos várias tentativas de criar o instantâneo e elas falharam devido à falta de espaço em disco. Ontem à noite, o instantâneo preencheu um disco com 340 GB de espaço livre.
Gostaria de receber qualquer explicação para esse enorme tamanho de instantâneo.
Em meu exame das possíveis causas, observo que o formato do instantâneo está definido como "Caractere - Obrigatório se um editor ou assinante não estiver executando o SQL Server". Isso apesar do fato de que em ambas as extremidades dessa replicação transnacional está o SQL Server nativo. Existe um tamanho diferente entre os formatos?
Desde já, obrigado.
Native mode file Size:105 MB
C:>bcp IVM_ArchiveTest.dbo.Event out D:\NOBACKUP\UseOnce\EventNative.dat -T -n
218977 rows copied. Network packet size (bytes): 4096 Clock Time (ms.)
Total : 7878 Average : (27796.01 rows per sec.)
Character mode file Size:66 MB
C:\>bcp IVM_ArchiveTest.dbo.Event out D:\NOBACKUP\UseOnce\EventChar.dat -T -c
218977 rows copied. Network packet size (bytes): 4096 Clock Time (ms.)
Total : 1654 Average : (132392.38 rows per sec.)
Observe que a representação de caracteres de qualquer dado quase sempre excederá o tamanho original. Dependendo do tipo, pode exceder em uma grande margem. Por exemplo. uma coluna int ocupa 4 bytes, mas a representação de caracteres
1000000
leva ~ 16 bytes como Unicode, incluindo delimitadores. Isso é um aumento de x4 ali. Datas, flutuações, números, todos geralmente aumentarão e por fatores ainda maiores que x4.A alternativa de formato nativo é o formato nativo do utilitário bcp (já que os instantâneos são aplicados usando bcp). Esse formato é apenas um pouco mais longo que o armazenamento SQL nativo ao comparar valores individuais, mas pode resultar em arquivos realmente menores do que o armazenamento exigido pelo SQL Server porque o arquivo bcp é denso: não há cabeçalho de página, nem páginas parcialmente preenchidas (fragmentação, fator de preenchimento). Consulte Usar formato nativo para importar ou exportar dados .
Além disso, você também deve compactar os instantâneos. Consulte Melhorar o desempenho geral da replicação :
@RemusRusanu explicou melhor o modo nativo e de caractere para bcp. +1 para isso de mim.
Para lidar com a sua situação, você pode usar qualquer uma das 2 abordagens diferentes.
A primeira é inicializar a assinatura a partir de um backup. Consulte Como: Inicializar um Assinante Transacional a partir de um Backup (Programação Transact-SQL de Replicação) . Isso é autoexplicativo e o BOL tem uma boa redação sobre isso.
Kendal Van Dyke escreveu no blog sobre a segunda abordagem em Reduzir o tempo de sincronização da replicação transacional aplicando instantâneos manualmente , o que é excelente e economiza tempo e vida. É um processo um pouco manual, mas já lidei com isso e é uma abordagem ganha-ganha.