Tendo uma publicação de mesclagem para replicar BLOBs (tipo image
), obtive E / S de disco tempdb muito alta para meu tamanho de dados. A publicação é apenas para download e não possui filtros.
A E / S de disco alta é causada pela sincronização (quando nenhum assinante está sincronizando, tudo está ok), fortemente correlacionado com o número de assinantes. Isso acontece mesmo quando nenhum dado é alterado no Publisher entre as sincronizações, e isso me incomoda.
- Tamanho da tabela replicada: 7 MB (a contagem total de linhas é de cerca de 100)
- E / S tempdb: ~ 30 MB / s para gravação (arquivos de log e dados)
- Número de assinantes: pouco mais de 100, cada um sincronizando a cada 30 minutos (mais ou menos uniformemente).
- Período de retenção definido para 14 dias
Usando o SQL Server 2008 no Publisher, o SQL Server 2005-2008R2 nos Assinantes. Todos os assinantes usam a sincronização da Web.
Além disso, a sincronização no assinante leva muito tempo, com várias ocorrências replmerg.log
como estas:
DatabaseReconciler, 2015/04/21 12:13:40.348, 3604, 25088, S2, INFO: [WEBSYNC_PROTOCOL] Sending client ReconcilerPhase WebSyncReconcilerPhase_RegularDownload DatabaseReconciler, 2015/04/21 12:13:47.063, 3604, 25194, S2, INFO: [WEBSYNC_PROTOCOL] Received server ReconcilerPhase WebSyncReconcilerPhase_LastRegularDownload
Tentei @stream_blob_columns
ligar e desligar sem efeito.
A pergunta é: É uma boa idéia usar a replicação de mesclagem para enviar esses blobs aos assinantes? Temos outras publicações (embora elas não tenham colunas BLOB) com muitos dados sem problemas com o tempdb. É uma falha do SQL Server ou uma instalação incorreta?
O Publisher e o Distribuidor estão na mesma instância, o SQL Server 2008 SP4, não podem ter certeza sobre os Assinantes, alguns deles talvez não estejam atualizados. De qualquer forma, posso preparar um ambiente de teste com poucos assinantes com versões controladas, se isso ajudar.
Confirmado, o uso excessivo de tempdb causado pela execução de sys.sp_MSenumgenerations90
. MSMerge_genhistory
Tabela marcada , encontrada mais de 1,2 milhões de registros onde pubid
é nulo.
Encontrou esta conversa com o guru de replicação:
Executado sp_mergemetadataretentioncleanup
sem efeito.
Foi encontrada uma observação em um caso como este (excesso de linhas MSmerge_genhistory
) onde a exclusão de linhas onde pubid
é nulo e genstatus
= 1 ajudou a corrigir a replicação.
As linhas excluídas pubid
são nulas (o que implica que todos os Assinantes estão sincronizados e os que não são - serão reinicializados no "modo manual") e as E / S de disco voltam ao normal novamente!
Sinto que essa situação pode ser causada pelo fato de que todos os meus assinantes são anônimos via WebSync e a maioria deles tem o mesmo nome de host. Vou tentar verificar se a -hostname
chave ajuda a não multiplicar os registros MSmerge_genhistory
.