Miglioramento delle prestazioni della replica transazionaleEnhance Transactional Replication Performance

Dopo aver considerato i suggerimenti sulle prestazioni generali descritti nella sezione Miglioramento delle prestazioni generali della replica, tenere presente le aree aggiuntive specifiche della replica transazionale riportate di seguito.After considering the general performance tips described in Enhancing General Replication Performance, consider these additional areas specific to transactional replication.

Progettazione di databaseDatabase Design

  • Ridurre al minimo le dimensioni delle transazioni nella progettazione delle applicazioni.Minimize transaction size in your application design.

    Per impostazione predefinita, la replica transazionale propaga le modifiche in base ai limiti delle transazioni.By default, transactional replication propagates changes according to transaction boundaries. Più piccole sono le transazioni, minori saranno le probabilità che l'agente di distribuzione dovrà rinviare una transazione a causa di problemi di rete.If transactions are smaller, it is less likely that the Distribution Agent will have to resend a transaction due to network issues. Se è necessario che l'agente rinvii una transazione, la quantità di dati inviati sarà inferiore.If the agent is required to resend a transaction, the amount of data sent is smaller.

Configurazione del server di distribuzioneDistributor Configuration

  • Configurare il server di distribuzione in un server dedicato.Configure the Distributor on a dedicated server.

    È possibile ridurre l'overhead di elaborazione sul server di pubblicazione configurando un server di distribuzione remoto.You can reduce processing overhead on the Publisher by configuring a remote Distributor. Per altre informazioni, vedere Configurazione della distribuzione.For more information, see Configure Distribution.

  • Ridimensionare in modo appropriato il database di distribuzione.Size the distribution database appropriately.

    Verificare la replica con un carico tipico per il sistema per determinare lo spazio necessario per archiviare i comandi.Test replication with a typical load for your system to determine how much space is required to store commands. Verificare che il database sia sufficientemente grande da consentire l'archiviazione dei comandi senza richiedere un aumento automatico delle dimensioni frequente.Ensure the database is large enough to store commands without having to auto-grow frequently. Per altre informazioni sulla modifica delle dimensioni di un database, vedere ALTER DATABASE (Transact-SQL).For more information about changing the size of a database, see ALTER DATABASE (Transact-SQL).

Progettazione della pubblicazionePublication Design

  • Replicare l'esecuzione della stored procedure durante gli aggiornamenti batch delle tabelle pubblicate.Replicate stored procedure execution when making batch updates to published tables.

    In caso di aggiornamenti batch che occasionalmente interessano un numero di righe elevato nel Sottoscrittore, è possibile aggiornare la tabella pubblicata utilizzando una stored procedure di cui quindi verrà pubblicata l'esecuzione.If you have batch updates that occasionally affect a large number of rows at the Subscriber, you should consider updating the published table using a stored procedure and publish the execution of the stored procedure. Anziché inviare un aggiornamento o un'eliminazione per ogni riga interessata, l'agente di distribuzione esegue la stessa procedura nel Sottoscrittore utilizzando valori dei parametri identici.Instead of sending an update or delete for every row affected, the Distribution Agent executes the same procedure at the Subscriber with the same parameter values. Per altre informazioni, vedere Publishing Stored Procedure Execution in Transactional Replication.For more information, see Publishing Stored Procedure Execution in Transactional Replication.

  • Distribuire gli articoli in più pubblicazioni.Spread articles across multiple publications.

    Se non è possibile utilizzare il parametro -SubscriptionStreams , descritto più avanti in questo argomento, provare a creare più pubblicazioni.If you cannot use the -SubscriptionStreams parameter (described later in this topic), consider creating multiple publications. La distribuzione di articoli tra queste pubblicazioni consente alla replica di applicare le modifiche in parallelo con i Sottoscrittori.Spreading articles across these publications allows replication to apply changes in parallel to Subscribers.

Considerazioni sulle sottoscrizioniSubscription Considerations

  • Utilizzare agenti indipendenti anziché agenti condivisi se si dispone di più pubblicazioni nello stesso server di pubblicazione, in base all'impostazione predefinita di Creazione guidata nuova pubblicazione.Use independent agents rather than shared agents if you have multiple publications on the same Publisher (this is the default for the New Publication Wizard).

  • Eseguire gli agenti in modo continuo anziché pianificarne l'esecuzione con frequenza elevata.Run agents continuously instead of on very frequent schedules.

    L'impostazione di un'esecuzione continua degli agenti anziché la creazione di pianificazioni frequenti, ad esempio ogni minuto, consente di migliorare le prestazioni della replica in quanto non richiede l'avvio e l'arresto dell'agente.Setting the agents to run continuously rather than creating frequent schedules (such as every minute) improves replication performance, because the agent does not have to start and stop. Quando si imposta l'esecuzione continua dell'agente di distribuzione, le modifiche vengono propagate con una bassa latenza agli altri server connessi nella topologia.When you set the Distribution Agent to run continuously, changes are propagated with low latency to the other servers that are connected in the topology. Per altre informazioni, vedere:For more information, see:

Parametri dell'agente di distribuzione e dell'agente di lettura logDistribution Agent and Log Reader Agent Parameters

  • Per risolvere i colli di bottiglia accidentali, usare il parametro –MaxCmdsInTran per l'agente di lettura log.To resolve accidental, one-time bottlenecks use the –MaxCmdsInTran parameter for the Log Reader Agent.

    Il parametro –MaxCmdsInTran specifica il numero massimo di istruzioni raggruppate in una transazione mentre l'agente di lettura log scrive i comandi nel database di distribuzione.The –MaxCmdsInTran parameter specifies the maximum number of statements grouped into a transaction as the Log Reader writes commands to the distribution database. L'utilizzo di questo parametro consente all'agente di lettura log e all'agente di distribuzione di dividere le transazioni di grandi dimensioni, ovvero costituite da molti comandi, nel server di pubblicazione in diverse transazioni più piccole quando i comandi vengono applicati al Sottoscrittore.Using this parameter allows the Log Reader Agent and Distribution Agent to divide large transactions (consisting of many commands) at the Publisher into several smaller transactions when applying commands at the Subscriber. Può inoltre ridurre la possibilità che si verifichino contese nel server di distribuzione e diminuire la latenza tra il server di pubblicazione e il Sottoscrittore.Specifying this parameter can reduce contention at the Distributor and reduce latency between the Publisher and Subscriber. Dal momento che la transazione originale viene applicata in unità più piccole, il Sottoscrittore può accedere alle righe di una vasta transazione logica del server di pubblicazione prima della fine della transazione originale, violando la rigida atomicità transazionale.Because the original transaction is applied in smaller units, the Subscriber can access rows of a large logical Publisher transaction prior to the end of the original transaction, breaking strict transactional atomicity. Il valore predefinito è 0, che consente di mantenere i limiti delle transazioni del server di pubblicazione.The default is 0, which preserves the transaction boundaries of the Publisher. Questo parametro non è applicabile ai server di pubblicazione Oracle.This parameter does not apply to Oracle Publishers.

    Avviso

    MaxCmdsInTran non è stato progettato per essere sempre abilitato.MaxCmdsInTran was not designed to be always turned on. Sono disponibili casi di risoluzione in cui qualcuno ha accidentalmente eseguito un numero elevato di operazioni DML in una singola transazione (causando ritardi nella distribuzione dei comandi fino a che l'intera transazione è in database di distribuzione, blocchi mantenuti e così via).It exists to work around cases where someone accidentally performed a large number of DML operations in a single transaction (causing delay in distribution of commands until the entire transaction is in distribution database, locks being held, etc.). Se periodicamente si verifica questa situazione, è necessario esaminare le applicazioni e trovare un modo per ridurre le dimensioni della transazione.If you routinely fall into this situation, you should review your applications and find ways to reduce the transaction size.

  • usare il parametro –SubscriptionStreams per l'agente di distribuzione.Use the –SubscriptionStreams parameter for the Distribution Agent.

    Il parametro –SubscriptionStreams può migliorare notevolmente la velocità effettiva della replica aggregata.The –SubscriptionStreams parameter can greatly improve aggregate replication throughput. e consente a più connessioni a un Sottoscrittore l'applicazione di batch di modifiche in parallelo, conservando molte delle caratteristiche transazionali disponibili quando si utilizza un singolo thread.It allows multiple connections to a Subscriber to apply batches of changes in parallel, while maintaining many of the transactional characteristics present when using a single thread. Se si verifica un errore di esecuzione o di commit di una delle connessioni, tutte le connessioni interromperanno il batch corrente e l'agente utilizzerà un singolo flusso per ripetere i batch non riusciti.If one of the connections fails to execute or commit, all connections will abort the current batch, and the agent will use a single stream to retry the failed batches. Prima del completamento di questa fase di tentativi, possono verificarsi inconsistenze temporanee delle transazioni nel Sottoscrittore.Before this retry phase completes, there can be temporary transactional inconsistencies at the Subscriber. Al termine del commit dei batch non riusciti, viene ripristinata la consistenza delle transazioni nel Sottoscrittore.After the failed batches are successfully committed, the Subscriber is brought back to a state of transactional consistency.

    È possibile specificare un valore per questo parametro di agente usando @subscriptionstreams di sp_addsubscription (Transact-SQL).A value for this agent parameter can be specified using the @subscriptionstreams of sp_addsubscription (Transact-SQL).

  • Aumentare il valore del parametro -ReadBatchSize per l'agente di lettura log.Increase the value of the -ReadBatchSize parameter for the Log Reader Agent.

    L'agente di lettura log e l'agente di distribuzione supportano le dimensioni di batch per operazioni di lettura e commit delle transazioni.The Log Reader Agent and Distribution Agent support batch sizes for transaction read and commit operations. Per impostazione predefinita, le dimensioni del batch sono pari a 500 transazioni.Batch sizes default to 500 transactions. L'agente di lettura log legge il numero specifico di transazioni nel log, indipendentemente dal fatto che siano contrassegnate o meno per la replica.The Log Reader Agent reads the specific number of transactions from the log, whether or not they are marked for replication. Se in un database di pubblicazione viene scritto un numero elevato di transazioni, ma solo un subset ridotto è contrassegnato per la replica, è necessario usare il parametro -ReadBatchSize per aumentare la dimensione del batch di lettura dell'agente di lettura log.When a large number of transactions is written to a publication database, but only a small subset of those are marked for replication, you should use the -ReadBatchSize parameter to increase the read batch size of the Log Reader Agent. Questo parametro non è applicabile ai server di pubblicazione Oracle.This parameter does not apply to Oracle Publishers.

  • Aumentare il valore del parametro -CommitBatchSize per l'agente di distribuzione.Increase the value of the -CommitBatchSize parameter for the Distribution Agent.

    Il commit di un set di transazioni presenta un overhead fisso. Se si esegue il commit di un numero maggiore di transazioni con una frequenza minore, l'overhead viene distribuito in un volume più ampio di dati.Committing a set of transactions has a fixed overhead; by committing a larger number of transactions less frequently, the overhead is spread across a larger volume of data. Tuttavia, il vantaggio offerto dall'aumento del valore di questo parametro decade in quanto il costo dell'applicazione delle modifiche è controllato da altri fattori, come l'I/O massimo del disco che contiene il log.However, the benefit of increasing this parameter drops off as the cost of applying changes is gated by other factors, such as the maximum I/O of the disk that contains the log. È inoltre necessario tenere presente che gli errori che determinano l'avvio dell'agente di distribuzione richiedono l'esecuzione del rollback e la nuova applicazione di un numero maggiore di transazioni.Additionally, there is a trade off to be considered: any failure that causes the Distribution Agent to start over must rollback and reapply a larger number of transactions. Per le reti non affidabili, un valore più basso può generare meno errori nonché il rollback e la riapplicazione di un numero inferiore di transazioni in caso di errore.For unreliable networks, a lower value can result in less failures and a smaller number of transactions to rollback and reapply if a failure occurs.

  • Ridurre il valore del parametro -PollingInterval per l'agente di lettura log.Decrease the value of the -PollingInterval parameter for the Log Reader Agent.

    Il parametro -PollingInterval specifica la frequenza con cui viene eseguita la query sulle transazioni da replicare nel log delle transazioni di un database pubblicato.The -PollingInterval parameter specifies how often the transaction log of a published database is queried for transactions to replicate. Il valore predefinito è 5 secondi.The default is 5 seconds. Se si riduce tale valore, il polling del log viene eseguito più spesso con la possibilità di generare una latenza più bassa per il recapito delle transazioni dal database di pubblicazione nel database di distribuzione.If you decrease this value, the log is polled more frequently, which can result in lower latency for the delivery of transactions from the publication database to the distribution database. È tuttavia consigliabile valutare la necessità di una latenza più bassa rispetto a un carico maggiore sul server determinato dall'esecuzione più frequente del polling.However, you should balance the need for lower latency against the increased load on the server from polling more frequently.

    I parametri degli agenti possono essere specificati nei profili agente e dalla riga di comando.Agent parameters can be specified in agent profiles and on the command line. Per altre informazioni, vedere:For more information, see:

  • Usare i profili agenti di replicaWork with Replication Agent Profiles

  • Visualizzare e modificare i parametri del prompt dei comandi dell'agente di replica (SQL Server Management Studio)View and Modify Replication Agent Command Prompt Parameters (SQL Server Management Studio)

  • Concetti di base relativi ai file eseguibili dell'agente di replicaReplication Agent Executables Concepts