Configurei a replicação transacional do SQL Server e, em seguida, adicionei exibições indexadas no assinante, mas as exibições indexadas parecem realmente desacelerar o assinante e quase o interrompem.
Tentei reinicializar a assinatura e até mesmo recriar a publicação, mas o problema permanece e, assim que adiciono uma exibição indexada, quase reduz a replicação.
A parte interessante é que já tenho muitas visualizações indexadas no assinante e funcionou bem, mas recentemente tentei adicionar mais visualizações indexadas e então tudo começou, e agora não consigo nem mesmo ter uma única visualização indexada.
Algum conselho?
OK, encontrei a solução e estou escrevendo aqui não apenas para ajudar outras pessoas que encontram um problema semelhante, mas também é algo valioso para todos que trabalham com exibições indexadas.
Primeiro, alguns pontos sobre exibições indexadas.
Exibições indexadas
Uma exibição de índice, embora também seja um "índice", também é uma "visão", portanto, pode se beneficiar quando o sistema estiver atualizando a exibição indexada de índices não agrupados na tabela base (e até mesmo cobrindo índices e estatísticas).
(Para provar esse ponto, adicionei índices em tabelas base em um banco de dados que não foi usado além de obter dados de replicação, e ainda assim a exibição do sistema dm_db_index_usage_stats mostrou que o usuário procura, e o único uso foi a exibição indexada.)
E parece que os melhores índices a serem adicionados para o benefício de uma exibição de índice seriam para buscar um único valor ou um pequeno intervalo de valores, já que é isso que a exibição indexada está basicamente fazendo ao ser usada localmente ou em um assinante para transacional replicação.
Embora junções condicionais não sejam proibidas pelas restrições de exibição indexada, ainda assim é uma boa ideia evitá-las (assim como em consultas regulares).
Considere a seguinte junção:
Isso pode causar gargalos de desempenho, em vez disso, é melhor dividi-lo em duas exibições indexadas extras e, em seguida, ter uma exibição que combine ambas usando "UNION ALL".
Embora uma visualização indexada também seja uma "visualização", também é um "índice" que, em outras palavras, que insere/atualiza/exclui também tem que atualizar a visualização indexada, portanto, se a exibição tiver problemas de desempenho, a atualização levará mais tempo e, em no caso de replicação, se cada transação demorar muito, elas podem se acumular uma após a outra e, eventualmente, interromper a replicação
Lembre-se também ao trabalhar com a replicação, que a reinicialização do assinante faz com que todos os índices e estatísticas que foram adicionados no cliente sejam descartados (se pre_creation_cmd tiver sido definido para descartar, que é o padrão) e apenas os índices que são parte da própria replicação será recriada e é preciso recriar manualmente todos os índices específicos do assinante.
Portanto, na minha situação, primeiro adicionei novas exibições indexadas que acabaram precisando de índices não clusterizados melhores e também algumas que usavam junções condicionais, mas depois de reinicializar não me preocupei em recriar primeiro os índices não clusterizados das tabelas base e primeiro tentou criar as exibições indexadas que causaram gargalos para o processo de replicação.