Replicação Transacional do SQL Server é uma das técnicas de replicação mais usadas para copiar ou distribuir dados em vários destinos. No artigo anterior, discutimos a Replicação do SQL Server, os Tipos de Replicação e os Internos Básicos sobre como a Replicação Transacional funciona. Agora, vamos mergulhar no Advanced Internals de como funciona a Replicação Transacional do SQL Server.
Arquitetura de replicação transacional
Antes de começarmos, recomendo que você atualize seus conhecimentos com meu artigo anterior aqui.
Vamos começar examinando a arquitetura de replicação transacional do SQL Server mostrada abaixo na documentação da Microsoft.
No Banco de dados do editor , crie uma Publicação que compõem a lista de Artigos (Tabelas , Visualizações , etc.,) que você precisa replicar para o Assinante base de dados. Assim que os artigos estiverem habilitados para replicação, todas as alterações que ocorrerem nesses artigos serão marcadas para replicação no banco de dados de logs transacionais do editor.
A replicação transacional do SQL Server pode ser inicializada a partir do Publisher para Distribuidor e depois para o Assinante banco de dados por meio do Agente de instantâneo ou Completo Backups . O Snapshot Agent pode executar a Inicialização através do Assistente de configuração de replicação . O backup completo é suportado apenas por meio de instruções T-SQL.
O Agente do Leitor de Log verifica o log transacional do banco de dados do Publicador para detectar as alterações rastreadas marcadas para replicação. Ele ignora outras alterações capturadas nos logs transacionais e copia as alterações de dados do log transacional para o banco de dados de distribuição.
O banco de dados de Distribuição pode estar no Publicador ou no Assinante, ou pode estar em outra instância independente do SQL Server. Observe as seguintes coisas:
- O Log Reader Agent é executado continuamente a partir do Distributor Server para procurar novos comandos marcados para replicação. No entanto, se você não deseja executar continuamente e deseja executar em uma programação, podemos alterar o trabalho SQL do Log Reader Agent que será criado.
- O Log Reader Agent coleta todos os registros marcados para replicação do log transacional em lotes e os envia para o banco de dados de distribuição.
- O Log Reader Agent coleta apenas transações confirmadas do banco de dados de log transacional do editor. Portanto, qualquer consulta de longa duração no banco de dados do Publicador pode afetar diretamente a Replicação, pois ela aguarda a conclusão da transação ativa.
O Agente de Distribuição pega todos os novos comandos não distribuídos do banco de dados de Distribuição e os aplica ao banco de dados de Assinatura por meio de Push ou Puxar Mecanismo .
- Enviar assinatura – o Distribuidor assume a propriedade de aplicar as alterações do banco de dados de Distribuição ao Assinante.
- Puxar assinatura – o Assinante banco de dados assume a propriedade para buscar alterações do banco de dados de distribuição para o assinante.
Assim que os registros forem distribuídos com sucesso da Distribuição para o banco de dados do Assinante, eles serão marcados como Distribuídos e também marcado para exclusão do banco de dados de distribuição .
Um dos principais trabalhos de manutenção de replicação é a Limpeza de distribuição Observação:o trabalho de distribuição é executado a cada 10 minutos para excluir registros distribuídos do banco de dados de distribuição para manter o tamanho do banco de dados de distribuição sob controle.
Portanto, nosso objetivo para o presente artigo é explorar os seguintes tópicos:
- Banco de dados de distribuição
- Agentes de replicação
- Agente de instantâneo
- Agente do leitor de registros
- Agente de distribuição
- Perfis do agente de replicação
- Trabalhos de manutenção de replicação
- Latência de replicação e tokens de rastreamento
- Utilitário TableDiff
- Alertas do SQL Server Agent
Banco de dados de distribuição do SQL Server
Um banco de dados de distribuição é um banco de dados do sistema criado durante a configuração da Replicação. É o coração da Replicação, pois a maior parte do processo é executada em um banco de dados de distribuição.
Devido à natureza do banco de dados de distribuição, podemos realizar apenas operações limitadas nele, como Backup e Restauração. Não podemos soltá-lo diretamente como bancos de dados de usuários.
Para um banco de dados enorme com muitos dados sendo replicados, precisamos tomar algumas medidas especiais para melhorar o desempenho da taxa de transferência da replicação:
Por padrão, o banco de dados de distribuição é criado no caminho de instalação padrão configurado no SQL Server . Se não estiver configurado, será criado no C : unidade ou nas pastas de instalação do SQL Server. Recomendamos que você mova o banco de dados de distribuição para um armazenamento/disco mais rápido para melhorar o desempenho.
O Tamanho inicial do arquivo e Autocrescimento do banco de dados de distribuição será definido de acordo com as configurações de tamanho de arquivo inicial e crescimento automático do banco de dados modelo. Configure o tamanho do arquivo inicial para um valor melhor, como 10 GB, no caso da replicação de banco de dados transacionalmente ocupada. As propriedades de Autogrowth devem ter até 512 MB ou 1 GB para arquivos de dados e log. Então, não haverá muita fragmentação nos arquivos de dados e log.
Configure o Diário ou Tarefas de backup de rotina incluir o banco de dados de distribuição para fins de referência ou solução de problemas em caso de corrupção ou perda de dados.
Configure a Reorganização diária do índice ou Manutenção empregos para incluir o banco de dados de distribuição. O banco de dados envolve grandes inserções de dados no MSrepl_transactions e MSrepl_commands mesas.
Nota:O polling contínuo nestas 2 tabelas e DELETE delas após o envio de dados com sucesso para o banco de dados do Assinante aumenta o risco de fragmentação. A reconstrução dessas tabelas de forma programada pode melhorar o desempenho do banco de dados de distribuição.
Para visualizar e modificar qualquer atributo do banco de dados de Distribuição relacionado à Replicação, clique com o botão direito do mouse em Replicação > Propriedades do Distribuidor :
Clique nas reticências botão à direita para ver mais detalhes sobre as opções individuais listadas.
Preste atenção, alterar qualquer parâmetro pode afetar o desempenho do banco de dados de distribuição. Portanto, implemente as alterações somente depois de avaliar cuidadosamente todos os parâmetros que deseja modificar.
Retenção de transações especifica quantos dados devem ser retidos no banco de dados de distribuição. Os valores mínimo e máximo podem ser especificados em horas ou dias.
O valor de Retenção de Transação definido como 0 horas indica que, assim que os registros forem replicados com êxito no banco de dados do Assinante, eles poderão ser excluídos do banco de dados de distribuição. Se você aumentar esse valor, o tamanho do banco de dados de distribuição aumentará. Assim, precisamos planejá-lo adequadamente.
Retenção de histórico especifica o período de retenção para armazenar os dados do Histórico de Desempenho de Replicação Transacional. Por padrão, são 48 horas.
Para descartar um banco de dados de distribuição , precisamos Desativar publicação associado a esse banco de dados de distribuição específico e, em seguida, elimine-o usando um dos dois métodos. Uma é uma combinação de Desativar publicação e o assistente de distribuição. Outro está usando sp_dropdistributor ou sp_dropdistributiondb procedimentos. O Assistente usa internamente esses 2 procedimentos para desabilitar a Distribuição e descartar o banco de dados de distribuição.
Agentes de replicação do SQL Server
Agentes de replicação são programas independentes responsáveis por rastrear alterações de dados do Publicador e propagar essas alterações para os bancos de dados do Distribuidor e do Assinante. Eles são executados como trabalhos do SQL Server Agent.
Primeiro, vamos ver a localização desses programas independentes.
Para configurar a replicação, precisamos ter os componentes de replicação instalado através do instalador do SQL Server. Quando terminar, podemos ver os programas independentes relacionados ao agente de replicação disponíveis no caminho de instalação:
C:\Arquivos de Programas\Microsoft SQL Server\130\COM
No meu caso, a versão do SQL Server é 2016. Portanto, está abaixo de 130 no caminho.
Para cada Replication Agent, podemos ver o respectivo programa autônomo disponível:
- DISTRIB.exe – Agente de Distribuição
- Logread.exe – Agente de leitura de log
- Qrdrsvc.exe – Agente de serviço de leitor de fila
- Replmerg.exe – Agente de replicação de mesclagem
- Snapshot.exe – Agente de instantâneo
- Tablediff.exe – Utilitário para comparar tabelas. Podemos entrar em mais detalhes posteriormente neste artigo.
Agora que sabemos pelo que esses programas autônomos são responsáveis e onde eles estão localizados, podemos entender como eles são executados por meio de SQL Server Agent Jobs.
Como estamos lidando com a Replicação Transacional do SQL Server, passaremos pelos trabalhos Snapshot Agent, Log Reader Agent e Distribution Agent (a mesma lógica se aplica a todos os outros agentes).
Agente de instantâneo
O Snapshot Agent é executado a partir do Servidor que contém o banco de dados de distribuição. Ele prepara o esquema e os dados iniciais de todos os artigos incluídos em uma publicação em um editor, cria os arquivos de instantâneos na pasta de instantâneos e registra os detalhes de sincronização no banco de dados de distribuição.
Da distribuição MSSnapshot_agents tabela, podemos identificar o trabalho do SQL Server Agent que faz as atividades do Snapshot Agent. Cada publicação envolve um trabalho dedicado do SQL Server Agent que deve cuidar das responsabilidades do Snapshot Agent.
Expanda SQL Server Agent e abra o nome do trabalho mencionado acima. Ele exibirá os detalhes e a Categoria nome – REPL-Snapshot
Clique na Etapa para ver as atividades executadas pelo agente Snapshot.
Clique em alguma etapa individual para visualizar as informações sobre o trabalho do agente Snapshot.
Etapa 1 registra uma entrada na tabela de histórico toda vez que o agente Snapshot é iniciado usando o sp_MSadd_snapshot_history procedimento.
A tabela que contém o histórico dos detalhes executados pelo agente Snapshot é a MSsnapshot_history tabela no banco de dados de distribuição.
Ele corresponderá ao Visualizar status do agente de instantâneo janela de diálogo.
Mover para a Etapa 2 – Executar agente . Ele iniciará o trabalho do Snapshot Agent .
Sob o Comando , não encontramos nenhuma instrução ou consulta T-SQL. Havia apenas alguns parâmetros listados. Portanto, a resposta está na seção destacada na ilustração acima. Mostra que o Tipo de Etapa de Trabalho é Replication Snapshot que inicia o programa autônomo snapshot.exe para executar as responsabilidades do Snapshot Agent.
Para obter mais detalhes sobre snapshot.exe, consulte este artigo do MSDN. Também entraremos em detalhes ao solucionar os problemas relacionados à replicação posteriormente.
Por fim, vamos para a Etapa 3 – a última etapa do trabalho. Ele captura todos os desligamentos inesperados dos trabalhos do agente e os desconecta.
Agente do leitor de log
Sempre que a publicação é configurada em um banco de dados, quaisquer alterações que ocorram nesses artigos são marcadas para replicação no log de transações. O Log Reader Agent lê essas alterações de dados via logread.exe e as armazena no banco de dados de distribuição por meio de 2 processos separados:
- Ler registros transacionais – usa o sp_replcmds procedimento armazenado estendido para verificar alterações de dados do Publicador. Como esse procedimento armazenado faz referência a arquivos DLL, os detalhes internos sobre como a Microsoft lê exatamente os arquivos de log não são identificados. No entanto, podemos tentar funções não documentadas como fn_dblog() e fn_dump_dblog() para entender como o arquivo de log transacional funciona.
- Gravar no banco de dados de distribuição – usa o sp_MSadd_replcmds procedimento armazenado no banco de dados de distribuição para gravar os dados binários lidos dos logs transacionais do banco de dados do Publicador. Ele grava os detalhes da transação no MSrepl_transactions tabela e comandos individuais para os MSrepl_commands tabela.
Apenas um trabalho do Log Reader SQL Server Agent está disponível para cada banco de dados publicado. Você pode identificar seu nome como mostrado abaixo:
Expanda o SQL Server Agent e abra o trabalho do Log Reader Agent acima para visualizar as etapas. Ele exibirá o trabalho Сategory em Leitor de Log de Replicação.
Clique em Passos para ver as etapas individuais executadas pelo Log Reader Agent. Assim como no trabalho do Snapshot Agent, podemos ver 3 etapas equivalentes para o trabalho do Log Reader Agent.
Etapa 1 chama o sp_MSadd_logreader_history procedimento para registrar as mensagens do histórico de status de inicialização do Log Reader Agent no MSlogreader_history tabela.
Etapa 2 inicia o processo do Log Reader Agent usando o programa autônomo logread.exe .
Você pode encontrar mais detalhes sobre logread.exe no respectivo artigo do MSDN. Mais tarde, também examinaremos os parâmetros críticos de configuração do Log Reader Agent.
Etapa 3 captura um desligamento abrupto do trabalho do Log Reader Agent.
Agente de Distribuição
O Agente de Distribuição (DISTRIB.exe) foi usado pela Replicação Transacional e de Instantâneo para aplicar os arquivos de Instantâneo iniciais e incrementais ou aplicar transações pendentes disponíveis do banco de dados de Distribuição para o banco de dados do Assinante.
Este Agente é executado a partir do Servidor Distribuidor para as Assinaturas Push e do Servidor do Assinante para as Assinaturas Pull. Para encontrar o nome do SQL Server Agent Job que executa as responsabilidades do agente de distribuição, podemos executar a consulta específica conforme mostrado abaixo:
Expanda o trabalho do SQL Server Agent e abra-o para ver mais informações e a categoria atribuída à distribuição de replicação.
Clique em Passos – você verá as etapas semelhantes às etapas expostas anteriormente dos trabalhos Snapshot e Log Reader Agent.
Etapa 1 chama o sp_MSadd_distribution_history procedimento para registrar as mensagens do histórico de status de inicialização do Log Reader Agent no MSdistribution_history tabela.
Etapa 2 inicia o processo do Distribution Agent (DISTRIB.exe) com os parâmetros padrão.
Para obter mais detalhes sobre DISTRIB.exe, consulte o artigo do MSDN. Além disso, analisaremos os parâmetros críticos de configuração do agente de distribuição nos próximos artigos.
Etapa 3 captura detalhes sobre o desligamento abrupto do trabalho do Agente de Distribuição.
Perfis do agente de replicação
Nas Propriedades do Distribuidor , podemos obter a opção de visualizar os Perfis do agente de replicação . Deixe os Perfis de Agente com os valores padrão e altere somente conforme necessário para fins de solução de problemas.
Clique em Padrões de perfil para exibir os valores padrão configurados para todos os Replication Agents disponíveis no Servidor.
Selecione os Agentes de Distribuição seção e clique nas reticências botão ao lado do Perfil de agente padrão para ver os valores configurados. Veja a ilustração abaixo:
Veja o Perfil de agente padrão dos Agentes de Snapshot Agente leitor:
Perfil de agente padrão para o Leitor de registros Agente:
Trabalhos de manutenção de replicação
Além dos Agentes de Replicação, temos Trabalhos de Manutenção de Replicação .
Esses são trabalhos do SQL Server Agent criados durante a configuração da Replicação Transacional do SQL Server. Eles estão disponíveis para garantir que a Replicação Transacional esteja funcionando corretamente.
Alguns trabalhos de manutenção de replicação são essenciais para a replicação transacional. Vamos revisá-los.
- Limpeza da distribuição: Distribuição – executa o sp_MSdistribution_cleanup procedimento para excluir comandos de replicação do MSrepl_transactions e MSrepl_commands mesas. A limpeza acontece no banco de dados de distribuição depois que os comandos são enviados com sucesso para o banco de dados do assinante com base no valor do período de retenção da transação configurado no banco de dados de distribuição. Por padrão, esse trabalho é executado a cada 10 minutos no banco de dados de distribuição. Altere esses valores somente após uma avaliação detalhada.
- Agente Limpeza do histórico:distribuição – executa o sp_MShistory_cleanup procedimento no banco de dados de distribuição para limpar registros históricos anteriores ao período de retenção de histórico configurado nesse banco de dados. Por padrão, ele é configurado para 48 dias e executado a cada 10 minutos. Se você quiser alterar esses valores, considere todos os aspectos com cuidado.
- Expirado Limpeza de assinatura – executa o sp_expired_subscription_cleanup procedimento no banco de dados mestre para descartar as assinaturas que expiraram ou ficaram inativas por muito tempo. Por padrão, esse procedimento é executado uma vez por dia.
Latência de replicação e tokens de rastreamento
Latência de replicação é o tempo necessário pelo processo de Replicação para rastrear quaisquer alterações que ocorram nos artigos publicados do banco de dados do Publicador até que seja entregue com sucesso ao Assinante via Distribuidor.
A latência de replicação é medida em milissegundos. O valor alvo de 0 (replicação em tempo real) para um valor muito baixo (casos ideais). É uma das principais medidas para monitorar o desempenho da Replicação.
Podemos verificar a latência de replicação usando o Replication Monitor ou os sp_replcounters dedicados procedimento.
Desde o Monitor de replicação tem a atualização taxa, pode haver pequenos desvios dos valores observados. Para superar os pequenos desvios ao calcular a latência de replicação, os Tracer Tokens vêm em nosso socorro.
Clique nos Tokens de rastreamento guia (veja a imagem acima) para enviar um novo conjunto de comandos de teste do Publicador. Em seguida, meça-o quando chega ao banco de dados do Distribuidor e quando foi enviado ao banco de dados do Assinante. Clique em Inserir rastreador para enviar tokens de rastreamento do banco de dados do Publicador:
Depois que os registros são recebidos com sucesso no Assinante, podemos rastrear a latência total da Replicação para nossa configuração atual. No nosso caso, são 9 segundos:4 segundos do Publicador para o Distribuidor e 5 segundos do Distribuidor para o Assinante.
Utilitário Tablediff
Utilitário Tablediff(tablediff.exe) será instalado no caminho C:\Program Files\Microsoft SQL Server\130\COM assim que tivermos os componentes de replicação instalados.
O utilitário TableDiff compara 2 tabelas para não convergência. Isso significa que podemos comparar 2 tabelas e identificar as diferenças entre elas. Em seguida, ele sincroniza a tabela Destination em comparação com a tabela Source gerando scripts INSERT/UPDATE/DELETE dedicados. Mais detalhes estão disponíveis na documentação oficial.
Como a Replicação Transacional do SQL Server não se preocupa com alterações manuais no banco de dados do Assinante, esse utilitário pode ajudar a sincronizar esses tipos de tabelas conforme e quando necessário. No entanto, ele não possui um assistente ou interface do usuário - você só pode acessá-lo por meio do prompt de comando ou de arquivos em lote.
Outras ferramentas podem simplificar a comparação e a sincronização. O dbForge Compare Bundle for SQL Server verifica as discrepâncias nos bancos de dados e tabelas específicas as identifica e analisa. Também gera os scripts necessários para sincronizá-los. Ele oferece uma interface visual e várias opções para executar as tarefas de maneira rápida e direta.
Alertas do SQL Server Agent
Todos os principais componentes relacionados aos Replication Agents residem como Trabalhos residem nos trabalhos do SQL Server Agent. Portanto, é essencial monitorar como os trabalhos do SQL Server Agent funcionam continuamente para garantir que a Replicação funcione sem problemas. Os problemas mais comuns estão abaixo:
- Problema de permissões ao executar qualquer um dos trabalhos do agente de replicação
- Problema de permissões ao executar qualquer um dos trabalhos de manutenção de replicação.
- Problema de permissões ao acessar o banco de dados do Editor ou distribuição ou do Assinante.
- SQL Server Agent não configurado para iniciar automaticamente na reinicialização do servidor.
- Vários outros problemas de dados relacionados à replicação, como conflitos, dados ausentes e assim por diante.
É por isso que devemos ter um mecanismo de alerta adequado para notificar o DBA ou outra pessoa sobre qualquer problema imediatamente.
Para alertar DBAs ou outras pessoas em caso de falhas ou erros de trabalho, devemos configurar o Database Mail para enviar alertas por email. Ele permite que o DBA responda imediatamente e corrija o problema. Discutiremos como configurar o Database Mail e os Alertas em um artigo separado posteriormente.
Ao configurar a Replicação, o SQL Server, por padrão, cria o conjunto de Alertas abaixo. Você pode configurá-los facilmente para os critérios necessários. Também garante o envio de Notificações às pessoas necessárias para ação imediata.
Conclusão
Obrigado por ler outro grande artigo sobre Replicação. Espero ter ajudado a esclarecer os aspectos internos da Replicação Transacional e os detalhes sobre o Banco de Dados de Distribuição, Agentes de Replicação e Programas Independentes responsáveis por eles. Também identificamos a latência de replicação, alertas e tokens de rastreamento.
Agora podemos mergulhar mais fundo e aprender a tratar e resolver problemas de replicação profissionalmente. Fique ligado no próximo artigo!