Eu tenho uma replicação de mesclagem e estou preocupado que a limpeza dos metadados possa não ser suficiente. Eu tenho um período de retenção de 60 dias e posso ver que o metadatacleanup-job remove linhas em msmege_genhistory que são mais antigas, mas apenas para linhas que possuem o guid correto em pubid. a maioria das linhas, cerca de 1,6 milhão, tem o valor NULL em pubid e não consigo descobrir o porquê. alguém sabe por que há tantos valores nulos?
Descobri que, como uso assinantes anônimos, a publicação se responsabilizará por todas as alterações e não definirá um pubid para suas alterações. a única linha que o assinante adiciona é uma linha com artnick = 0. Portanto, se o assinante adicionar alterações, o assinante terá apenas uma linha e terá um guid válido para a publicação, mas a linha não aponta para nenhuma alteração. em vez disso, a publicação adicionará as alterações como se fossem originadas lá.
O problema com a limpeza de metadados não estava relacionado aos valores nulos, eram assinaturas órfãs. Se uma assinatura anônima for criada em um de nossos dispositivos portáteis e não for sincronizada, isso fará com que a limpeza exclua gerações. Isso é adicionado com sp2 no sql2012 e a limpeza cria uma lista de gerações excluídas que estão "ativas", o problema é que, se uma assinatura em sysmergesubscriptions tiver null em last_local_sentgen, ela adicionará todas as gerações entre 1 e sentgen à lista de exclusão e a metadados não são limpos. Tentei remover essas assinaturas no meu ambiente de teste e agora posso ver que a limpeza está sendo executada corretamente. Também posso ver que isso também pode acontecer se uma criação de assinatura atingir o tempo limite.
Espero que isso ajude alguém.