Aprimorar o desempenho geral da replicaçãoEnhance General Replication Performance

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure (somente a Instância Gerenciada) nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure SQL Data Warehouse noParallel Data Warehouse

É possível melhorar o desempenho geral para todos os tipos de replicação no seu aplicativo e na rede, por meio das diretrizes descritas neste tópico.You can enhance the general performance for all types of replication in your application and on your network by using the guidelines described in this topic.

Servidor e redeServer and Network

  • Defina a quantidade mínima e máxima de memória alocada para MicrosoftMicrosoft Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine.Set the minimum and maximum amount of memory allocated to MicrosoftMicrosoft Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine.

    Por padrão, o Mecanismo de Banco de DadosDatabase Engine altera seus requisitos de memória dinamicamente com base nos recursos do sistema disponíveis.By default, the Mecanismo de Banco de DadosDatabase Engine changes its memory requirements dynamically based on available system resources. Para evitar baixa disponibilidade de memória durante as atividades de replicação, use a opção min server memory para definir a mínima memória disponível.To avoid low memory availability during replication activities, use the min server memory option to set the minimum available memory. Para evitar que o sistema operacional busque memória no disco, você também pode definir a quantidade máxima de memória com a opção max server memory .To avoid having the operating system page to disc for memory, you can also set a maximum amount of memory with the max server memory option. Para mais informações, consulte Opções de configuração do servidor da memória do servidor.For more information, see Server Memory Server Configuration Options.

  • Assegure alocação adequada de arquivos de dados de banco de dados e arquivos de log.Ensure proper allocation of database data files and log files. Use uma unidade de disco separada para o log de transação para todos os bancos de dados envolvidos na replicação.Use a separate disk drive for the transaction log for all databases involved in replication.

    É possível diminuir o tempo de gravação das transações armazenando os arquivos de log em uma unidade de disco diferente da usada para armazenar o banco de dados.You can decrease the time it takes to write transactions by storing the log files on a disk drive different than the one used to store the database. É possível espelhar aquela unidade, usando um RAID (Arranjo Redundante de Discos Baratos)-1, se for necessária tolerância a falhas.You can mirror that drive, using a Redundant Array of Inexpensive Disks (RAID)-1, if you require fault tolerance. Use RAID 0 ou 0+1 (dependendo de sua necessidade por tolerância a falhas) para outros arquivos de banco de dados.Use RAID 0 or 0+1 (depending on your need for fault tolerance) for other database files. Essa é uma prática boa que independe do uso da replicação.This is a good practice regardless of whether or not replication is being used.

  • Considere a adição de memória a servidores usados na replicação, particularmente o Distribuidor.Consider adding memory to servers used in replication, particularly the Distributor.

  • Use computadores com multiprocessadores.Use multiprocessor computers.

    Os agentes de replicação podem tirar proveito de processadores adicionais no servidor.Replication agents can take advantage of additional processors on the server. Se estiver trabalhando com alto uso de CPU, considere a instalação de uma CPU mais rápida ou de várias CPUs.If you are running at high CPU usage, consider installing a faster CPU or multiple CPUs.

  • Use uma rede rápida.Use a fast network.

    A rede pode ser um gargalo de desempenho significante, particularmente para replicação transacional.The network can be a significant performance bottleneck, particularly for transactional replication. A propagação de alterações aos Assinantes pode ser melhorada significantemente por meio de uma rede rápida de 100 megabits por segundo (Mbs) ou mais rápida.The propagation of changes to Subscribers can be significantly enhanced by using a fast network of 100 megabits per second (Mbps) or faster. Se a rede for lenta, especifique configurações de rede e parâmetros de agente apropriados.If the network is slow, specify appropriate network settings and agent parameters.

Design de banco de dadosDatabase Design

  • Siga as práticas recomendadas para design de banco de dados.Follow best practices for database design.

    Um banco de dados replicado geralmente se beneficia das mesmas otimizações de desempenho que um banco de dados não replicado.A replicated database generally benefits from the same performance optimizations as a non-replicated database. Entretanto, os índices devem ser usados com cautela no Assinante: a coluna de chave primária no Assinante deve ser indexada, mas índices adicionais podem afetar o desempenho de inserção, atualização e exclusão.However, indexes should be used with caution at the Subscriber: the primary key column at the Subscriber should be indexed, but additional indexes can affect insert, update, and delete performance.

  • Considere definir a opção de banco de dados READ_COMMITTED_SNAPSHOT.Consider setting the READ_COMMITTED_SNAPSHOT database option.

    Para ajudar a reduzir a contenção entre a atividade do usuário e a atividade do agente de replicação, defina essa opção para os bancos de dados de publicação e assinatura:To help reduce contention between user activity and replication agent activity, set this option for the publication and subscription databases:

    ALTER DATABASE AdventureWorks  
    SET READ_COMMITTED_SNAPSHOT ON  
    

    Para obter mais informações, veja ALTER DATABASE (Transact-SQL).For more information, see ALTER DATABASE (Transact-SQL).

  • Seja cauteloso com a lógica do aplicativo nos gatilhos.Be cautious with application logic in triggers.

    A lógica corporativa nos gatilhos definidos pelo usuário no Assinante pode reduzir a velocidade da replicação de alterações no Assinante:Business logic in user-defined triggers at the Subscriber can slow down the replication of changes to the Subscriber:

    Se gatilhos forem usados para manter a integridade referencial nas tabelas publicadas para replicação de mesclagem, especifique a ordem de processamento das tabelas para reduzir o número de repetições necessárias para o Merge Agent.If you use triggers to maintain referential integrity in tables published for merge replication, specify the processing order of tables to reduce the number of retries required for the Merge Agent. Para obter mais informações, confira Especificar opções de replicação de mesclagem.For more information, see Specify merge replication options.

  • Limite o uso de tipos de dados LOB (objetos grandes).Limit the use of Large Object (LOB) data types.

    Os LOBs requerem mais espaço de armazenamento e processamento que outros tipos de dados de coluna.LOBs require more storage space and processing than other column data types. Não inclua essas colunas em artigos a menos que seja necessário para seu aplicativo.Do not include these columns in articles unless necessary for your application. Os tipos de dados text, ntexte image são preteridos.The data types text, ntext, and image are deprecated. Se incluir LOBs, recomendamos o uso dos tipos de dados varchar(max) , nvarchar(max) , varbinary(max) , respectivamente.If you do include LOBs, we recommend that you use the data types varchar(max), nvarchar(max), varbinary(max), respectively.

    Para replicação transacional, considere usar o perfil do Distribution Agent chamado Perfil de distribuição para fluxo contínuo do banco de dados OLE.For transactional replication, consider using the Distribution Agent profile called Distribution Profile for OLEDB streaming. Para saber mais, confira Replication Agent Profiles.For more information, see Replication Agent Profiles.

Design de publicaçãoPublication Design

  • Publique somente os dados requeridos.Publish only the data required.

    Porque a replicação é fácil de configurar, há uma tendência para publicar mais dados do que é, de fato, necessário.Because replication is easy to set up, there is a tendency to publish more data than is actually required. Isso pode consumir recursos adicionais dentro dos bancos de dados de distribuição e arquivos de instantâneo, e pode reduzir a taxa de transferência para os dados requeridos.This can consume additional resources within the distribution databases and snapshot files, and can lower the throughput for required data. Evite publicar tabelas desnecessárias e considere atualizar as publicações com menos frequência.Avoid publishing unnecessary tables and consider updating publications less frequently.

  • Minimize conflitos por design de publicação e comportamento de aplicativo.Minimize conflicts through publication design and application behavior.

    Os seguintes tipos de replicação permitem que os dados sejam alterados no Assinante: replicação de mesclagem, replicação transacional com assinaturas atualizáveis e replicação transacional ponto a ponto.The following types of replication allow data to be changed at Subscribers: merge replication, transactional replication with updatable subscriptions, and peer-to-peer transactional replication. A replicação de mesclagem e a replicação transacional com assinaturas atualizáveis oferecem suporte a conflitos de dados, se uma dada linha for atualizada em um ou mais nós entre sincronizações.Merge replication and transactional replication with updatable subscriptions support data conflicts if a given row is updated at more than one node between synchronizations. A replicação ponto a ponto não oferece suporte a conflitos de dados; as alterações de dados devem ser particionadas.Peer-to-peer replication does not support data conflicts; data changes must be partitioned. Independentemente do tipo de replicação usada, recomendamos que o particionamento das alterações sempre que possível, pois isso reduz o processamento necessário para detecção e resolução de conflitos.Regardless of the type of replication used, we recommend that you partition changes whenever possible, because this reduces the processing required for conflict detection and resolution.

    As alterações podem ser particionadas por meio da publicação de subconjuntos de dados em cada Assinante, ou fazendo com que o aplicativo faça alterações diretas para uma determinada linha em um nó específico:Changes can be partitioned by publishing subsets of data to each Subscriber or by having an application direct changes for a given row to a given node:

    • A replicação de mesclagem oferece suporte a subconjuntos de publicação de dados que usam filtros com parâmetros com uma única publicação.Merge replication supports publishing subsets of data using parameterized filters with a single publication. Para saber mais, confira Parameterized Row Filters.For more information, see Parameterized Row Filters.

    • A replicação transacional oferece suporte à publicação de subconjuntos de dados que usam filtros estáticos com publicações múltiplas.Transactional replication supports publishing subsets of data using static filters with multiple publications. Para obter mais informações, consulte Filter Published Data (Filtrar dados publicados).For more information, see Filter Published Data.

  • Use filtros de linha criteriosamente.Use row filters judiciously.

    Quando uma publicação transacional inclui um ou mais artigos que usam filtros de linha, o Log Reader Agent deve aplicar o filtro a cada linha afetada por uma atualização à tabela enquanto verifica o log de transações.When a transactional publication includes one or more articles that use row filters, the Log Reader Agent must apply the filter to each row affected by an update to the table as it scans the transaction log. Consequentemente, a taxa de transferência do Log Reader Agent é afetada.The throughput of the Log Reader Agent is therefore affected.

    De forma semelhante, a replicação de mesclagem deve avaliar as linhas alteradas ou excluídas para determinar quais Assinantes devem receber essas linhas.Similarly, merge replication must evaluate changed or deleted rows to determine which Subscribers should receive those rows. Quando os filtros de linha são empregados para reduzir os dados requeridos no Assinante, esse processamento é mais complexo e pode ser mais lento do que publicar todas as linhas em uma tabela.When row filters are employed to reduce the data required at a Subscriber, this processing is more complex and can be slower than when you publish all rows in a table. Considere cuidadosamente a troca entre requisitos de armazenamento reduzidos em cada Assinante e a necessidade de alcançar a taxa de transferência máxima.Consider carefully the tradeoff between reduced storage requirements at each Subscriber and the need for achieving maximum throughput. Para mais informações sobre filtragem, consulte Filtrar dados publicados.For more information on filtering, see Filter Published Data.

Considerações sobre assinaturaSubscription Considerations

  • Use assinaturas pull quando houver um número grande de Assinantes.Use pull subscriptions when there are a large number of Subscribers.

    O Distribution Agent e o Merge Agent são executados no Distribuidor para as assinaturas push e nos Assinantes para assinaturas pull.The Distribution Agent and Merge Agent run at the Distributor for push subscriptions, and at Subscribers for pull subscriptions. Use assinaturas pull para melhorar o desempenho movendo o processamento do agente do Distribuidor para os Assinantes.Using pull subscriptions can improve performance by moving agent processing from the Distributor to Subscribers. Para obter mais informações, consulte Subscribe to Publications (Assinar publicações).For more information, see Subscribe to Publications.

  • Considere a reinicialização da assinatura se os Assinantes estiverem muito desatualizados.Consider reinitialization of the subscription if Subscribers are too far behind.

    Quando grandes quantidades de alterações precisarem ser enviadas aos Assinantes, reinicializá-los com um novo instantâneo pode ser mais rápido que usar a replicação para mover as alterações individuais.When large amounts of changes need to be sent to Subscribers, reinitializing them with a new snapshot might be faster than using replication to move the individual changes. Para obter mais informações, consulte Reinicializar as assinaturas.For more information, see Reinitialize Subscriptions.

    Para replicação transacional, o Replication Monitor exibe na guia Comandos Não Distribuídos as informações sobre: o número de transações no banco de dados de distribuição que ainda não foi distribuídas ao Assinante e o tempo estimado para distribuir essas transações.For transactional replication, Replication Monitor displays on the Undistributed Commands tab information about: the number of transactions in the distribution database that have not yet been distributed to a Subscriber; and the estimated time for distributing these transactions. Para obter mais informações, confira Exibir informações e executar tarefas usando o Replication Monitor.For more information, see View information and perform tasks using Replication Monitor.

Considerações de instantâneoSnapshot Considerations

  • Execute o Snapshot Agent apenas quando necessário e em períodos de pouca atividade.Run the Snapshot Agent only when necessary and at off-peak times.

    O Snapshot Agent copia em massa os dados da tabela publicada no Publicador para uma pasta de instantâneo no Distribuidor.The Snapshot Agent bulk copies data from the published table on the Publisher to a file in the snapshot folder on the Distributor. Gerar um instantâneo pode ser um processo intensivo de recurso e é melhor ser agendado para períodos de pouca atividade.Generating a snapshot can be a resource intensive process and is best scheduled during off-peak times.

  • Use um instantâneo de modo nativo a menos que um instantâneo de modo de caractere seja requerido.Use a native mode snapshot unless a character mode snapshot is required.

    Use o instantâneo de modo nativo para todos os Assinantes exceto os Assinantes nãoSQL ServerSQL Server e Assinantes que estão executando o SQL Server CompactSQL Server Compact, que requerem o instantâneo de modo de caractere.Use the default native mode snapshot for all Subscribers except non-SQL ServerSQL Server Subscribers and Subscribers running SQL Server CompactSQL Server Compact, which require a character mode snapshot.

  • Use uma única pasta de instantâneo para a publicação.Use a single snapshot folder for a publication.

    Ao especificar as propriedades da publicação relacionadas com o local do instantâneo, é possível escolher gerar os arquivos de instantâneo na pasta de instantâneo padrão, em uma pasta alternativa de instantâneo ou em ambos.When specifying the publication properties related to snapshot location, you can choose to generate snapshot files to the default snapshot folder, to an alternate snapshot folder, or to both. Gerar arquivos de instantâneo em ambos os locais requer espaço em disco adicional e mais processamento durante a execução do Snapshot Agent.Generating snapshot files in both locations requires additional disk space and more processing when the Snapshot Agent runs.

  • Coloque a pasta de instantâneo em uma unidade local do Distribuidor que não seja usada para armazenar bancos de dados ou arquivos de log.Place the snapshot folder on a drive local to the Distributor that is not used to store database or log files.

    O Snapshot Agent executa uma gravação sequencial de dados na pasta de instantâneo.The Snapshot Agent performs a sequential write of data to the snapshot folder. Colocar a pasta de instantâneo em uma unidade separada de qualquer banco de dados ou de arquivos de log reduz a contenção entre os discos, e faz com que o processo do instantâneo seja concluído mais rapidamente.Placing the snapshot folder on a separate drive from any database or log files reduces contention among the disks and helps the snapshot process complete faster.

  • Ao criar o banco de dados de assinatura no Assinante, considere especificar um modelo de recuperação de registros simples ou com log de operações em massa.When you create the subscription database at the Subscriber, consider specifying a recovery model of simple or bulk-logged. Isso permite log mínimo das inserções em massa executado durante a aplicação do instantâneo no Assinante.This allows minimal logging of the bulk inserts performed during the application of the snapshot at the Subscriber. Após o instantâneo ter sido aplicado ao banco de dados de assinatura, é possível mudar para um modelo diferente de recuperação, se necessário (os bancos de dados replicados podem usar qualquer um dos modelos de recuperação).After the snapshot has been applied to the subscription database, you can change to a different recovery model if necessary (replicated databases can use any of the recovery models). Para mais informações sobre como selecionar um modelo de recuperação, consulte Visão geral da recuperação e da restauração (SQL Server).For more information about selecting a recovery model, see Restore and Recovery Overview (SQL Server).

  • Considere usar a pasta de instantâneo alternativo e instantâneos compactados em mídia removíveis para redes que não sejam de banda larga.Consider using the alternate snapshot folder and compressed snapshots on removable media for low-bandwidth networks.

    Os arquivos de instantâneo compactados na pasta de instantâneo alternativo podem reduzir os requisitos de armazenamento em disco, e facilitar a transferência de arquivos de instantâneo em mídia removível.Compressing snapshot files in the alternate snapshot folder can reduce snapshot disk storage requirements and make it easier to transfer snapshot files on removable media.

    Os instantâneos compactados podem, em alguns casos, melhorar o desempenho da transferência de arquivos de instantâneo pela rede.Compressed snapshots can, in some cases, improve the performance of transferring snapshot files across the network. No entanto, a compactação de instantâneos exige processamento adicional por parte do Snapshot Agent ao gerar os arquivos de instantâneo, e por parte do Distribution Agent ou Merge Agent ao aplicar os arquivos de instantâneo.However, compressing the snapshot requires additional processing by the Snapshot Agent when generating the snapshot files, and by the Distribution Agent or Merge Agent when applying the snapshot files. Em alguns casos, isso pode reduzir a velocidade da geração de instantâneos e aumentar o tempo para se aplicar um instantâneo.This may slow down snapshot generation and increase the time it takes to apply a snapshot in some cases. Além disso, instantâneos compactados não podem ser retomados no caso de uma falha de rede; consequentemente, não são apropriados para redes não confiáveis.Additionally, compressed snapshots cannot be resumed if a network failure occurs; therefore they are not suitable for unreliable networks. Considere essa possibilidade cuidadosamente ao usar instantâneos compactados por uma rede.Consider these tradeoffs carefully when using compressed snapshots across a network. Para obter mais informações, confira Modificar opções de instantâneo.For more information, see Modify snapshot options.

  • Considere inicializar uma assinatura manualmente.Consider initializing a subscription manually.

    Em alguns cenários, como os que envolvem grandes bancos de dados iniciais, é preferível inicializar uma assinatura usando um método diferente do que usando um instantâneo.In some scenarios, such as those involving large initial datasets, it is preferable to initialize a subscription using a method other than a snapshot. Para obter mais informações, consulte Initialize a Transactional Subscription Without a Snapshot.For more information, see Initialize a Transactional Subscription Without a Snapshot.

Parâmetros de agenteAgent Parameters

  • Reduza os níveis detalhados de agentes de replicação, exceto durante o teste inicial, a monitoração e a depuração.Reduce the verbose levels of replication agents except during initial testing, monitoring, or debugging.

    Reduza os parâmetros –HistoryVerboseLevel e –OutputVerboseLevel dos Agentes de Distribuição ou dos Agentes de Mesclagem.Reduce the –HistoryVerboseLevel parameter and the –OutputVerboseLevel parameter of the Distribution Agents or Merge Agents. Isso reduz o número de linhas novas inseridas para controlar o histórico de agente e saída.This reduces the number of new rows inserted to track agent history and output. Em vez disso, as mensagens de histórico anteriores com o mesmo status são atualizadas para as novas informações de histórico.Instead, previous history messages with the same status are updated to the new history information. Aumente os níveis detalhados de teste, monitoração e depuração, de forma a obter o máximo possível de informações sobre a atividade do agente.Increase the verbose levels for testing, monitoring, and debugging so that you have as much information about agent activity as possible.

  • Use o parâmetro –MaxBCPThreads do Agente de Instantâneo, Agente de Mesclagem e Agente de Distribuição (o número de threads especificado não deve exceder o número de processadores no computador).Use the –MaxBCPThreads parameter of the Snapshot Agent, Merge Agent, and Distribution Agent (the number of threads specified should not exceed the number of processors on the computer). Esse parâmetro especifica o número de operações de cópia em massa que podem ser executadas em paralelo quando o instantâneo é criado e aplicado.This parameter specifies the number of bulk copy operations that can be performed in parallel when the snapshot is created and applied.

  • Use o parâmetro –UseInprocLoader do Agente de Distribuição e do Agente de Mesclagem (esse parâmetro não pode ser usado se as tabelas publicadas incluírem colunas XML).Use the –UseInprocLoader parameter of the Distribution Agent and the Merge Agent (this parameter cannot be used if published tables include XML columns). Esse parâmetro faz o agente usar o comando BULK INSERT quando o instantâneo for aplicado.This parameter causes the agent to use the BULK INSERT command when the snapshot is applied.

Os parâmetros de agente podem ser especificados em perfis de agente e na linha de comando.Agent parameters can be specified in agent profiles and on the command line. Para obter mais informações, consulte:For more information, see: