Miglioramento delle prestazioni generali della replicaEnhance General Replication Performance

È possibile migliorare le prestazioni generali di tutti i tipi di replica nell'applicazione e nella rete attenendosi alle istruzioni riportate in questo argomento.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.

Server e reteServer and Network

  • Impostare la quantità minima e massima di memoria allocata a MicrosoftMicrosoft Motore di database di SQL ServerSQL Server Database Engine.Set the minimum and maximum amount of memory allocated to MicrosoftMicrosoft Motore di database di SQL ServerSQL Server Database Engine.

    Per impostazione predefinita, nel Motore di databaseDatabase Engine i requisiti di memoria possono variare dinamicamente in base alle risorse di sistema disponibili.By default, the Motore di databaseDatabase Engine changes its memory requirements dynamically based on available system resources. Per evitare che durante le attività di replica la memoria risulti insufficiente, impostare la quantità minima di memoria disponibile tramite l'opzione min server memory .To avoid low memory availability during replication activities, use the min server memory option to set the minimum available memory. Per evitare che il sistema operativo richieda memoria del disco, è inoltre possibile impostare una quantità massima di memoria mediante l'opzione 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. Per altre informazioni, vedere Opzioni di configurazione del server Server Memory.For more information, see Server Memory Server Configuration Options.

  • Verificare la corretta allocazione dei file di dati e dei file di log del database.Ensure proper allocation of database data files and log files. Utilizzare un'unità disco distinta per il log delle transazioni di tutti i database interessati dalla replica.Use a separate disk drive for the transaction log for all databases involved in replication.

    Per ridurre i tempi di scrittura delle transazioni, archiviare i file di log in un'unità disco diversa da quella in cui è archiviato il database.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. È possibile eseguire il mirroring dell'unità utilizzando la modalità 1 della tecnologia RAID (Redundant Array of Inexpensive Disks), se è necessario implementare la tolleranza di errore.You can mirror that drive, using a Redundant Array of Inexpensive Disks (RAID)-1, if you require fault tolerance. Per gli altri file di database utilizzare RAID 0 o 0+1, a seconda delle esigenze specifiche di tolleranza di errore.Use RAID 0 or 0+1 (depending on your need for fault tolerance) for other database files. Questo metodo è ottimale indipendentemente dal fatto che venga utilizzata o meno la replica.This is a good practice regardless of whether or not replication is being used.

  • Valutare l'opportunità di aggiungere memoria ai server utilizzati per la replica, in particolare al server di distribuzione.Consider adding memory to servers used in replication, particularly the Distributor.

  • Utilizzare computer multiprocessore.Use multiprocessor computers.

    Gli agenti di replica sono in grado di utilizzare processori aggiuntivi del server.Replication agents can take advantage of additional processors on the server. In sistemi con utilizzo elevato della CPU è consigliabile installare una CPU più veloce o più CPU.If you are running at high CPU usage, consider installing a faster CPU or multiple CPUs.

  • Utilizzare una rete veloce.Use a fast network.

    La rete può rappresentare un significativo collo di bottiglia per le prestazioni, in particolare per la replica transazionale.The network can be a significant performance bottleneck, particularly for transactional replication. È possibile migliorare notevolmente la propagazione delle modifiche nei Sottoscrittori utilizzando una rete veloce pari a 100 megabit al secondo (Mbps) o superiore.The propagation of changes to Subscribers can be significantly enhanced by using a fast network of 100 megabits per second (Mbps) or faster. Se la rete è lenta, specificare le impostazioni di rete e i parametri degli agenti appropriati.If the network is slow, specify appropriate network settings and agent parameters.

Progettazione di databaseDatabase Design

  • Seguire le procedure consigliate per la progettazione del database.Follow best practices for database design.

    Un database replicato generalmente usufruisce delle stesse ottimizzazioni delle prestazioni di un database non replicato.A replicated database generally benefits from the same performance optimizations as a non-replicated database. È tuttavia consigliabile utilizzare gli indici con attenzione nel Sottoscrittore, tenendo presente che è necessario indicizzare la colonna chiave primaria nel Sottoscrittore, ma che ulteriori indici possono influire sulle prestazioni relative alle operazioni di inserimento, aggiornamento ed eliminazione.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.

  • Valutare l'opportunità di impostare l'opzione di database READ_COMMITTED_SNAPSHOT.Consider setting the READ_COMMITTED_SNAPSHOT database option.

    Per ridurre la contesa tra l'attività dell'utente e quella dell'agente di replica, impostare questa opzione per i database di pubblicazione e sottoscrizione: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  
    

    Per altre informazioni, vedere ALTER DATABASE (Transact-SQL).For more information, see ALTER DATABASE (Transact-SQL).

  • Prestare attenzione alla logica dell'applicazione nei trigger.Be cautious with application logic in triggers.

    La logica di business nei trigger definiti dall'utente nel Sottoscrittore può rallentare la replica delle modifiche in quest'ultimo:Business logic in user-defined triggers at the Subscriber can slow down the replication of changes to the Subscriber:

  • Limitare l'utilizzo dei tipi di dati LOB (Large Object).Limit the use of Large Object (LOB) data types.

    Tali dati richiedono uno spazio di archiviazione e un'elaborazione maggiori rispetto ad altri tipi di dati di colonna.LOBs require more storage space and processing than other column data types. Non includere queste colonne negli articoli a meno che non sia necessario per l'applicazione in uso.Do not include these columns in articles unless necessary for your application. I tipi di dati text, ntexte image sono deprecati.The data types text, ntext, and image are deprecated. Se è necessario includere dati LOB, è consigliabile utilizzare rispettivamente i tipi di dati varchar(max), nvarchar(max)e varbinary(max).If you do include LOBs, we recommend that you use the data types varchar(max), nvarchar(max), varbinary(max), respectively.

    Per la replica transazionale, provare a utilizzare il profilo dell'agente di distribuzione denominato Profilo di distribuzione per flussi OLEDB.For transactional replication, consider using the Distribution Agent profile called Distribution Profile for OLEDB streaming. Per altre informazioni, vedere Replication Agent Profiles.For more information, see Replication Agent Profiles.

Progettazione della pubblicazionePublication Design

  • Pubblicare solo i dati necessari.Publish only the data required.

    La semplicità di impostazione della replica favorisce la tendenza a pubblicare una quantità di dati maggiore di quella effettivamente necessariaBecause replication is easy to set up, there is a tendency to publish more data than is actually required. con il conseguente utilizzo di risorse aggiuntive nei database di distribuzione e nei file di snapshot e la diminuzione della velocità effettiva dei dati richiesti.This can consume additional resources within the distribution databases and snapshot files, and can lower the throughput for required data. Evitare la pubblicazione di tabelle non necessarie e aggiornare le pubblicazioni con una frequenza minore.Avoid publishing unnecessary tables and consider updating publications less frequently.

  • Ridurre i conflitti mediante la progettazione della pubblicazione e il comportamento dell'applicazione.Minimize conflicts through publication design and application behavior.

    La modifica dei dati nei Sottoscrittori è consentita nella replica di tipo merge, nella replica transazionale con sottoscrizioni aggiornabili e nella replica transazionale peer-to-peer.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. La replica di tipo merge e la replica transazionale con sottoscrizioni aggiornabili supportano conflitti di dati se una determinata riga viene aggiornata in più nodi tra le sincronizzazioni.Merge replication and transactional replication with updatable subscriptions support data conflicts if a given row is updated at more than one node between synchronizations. La replica peer-to-peer non supporta conflitti di dati e le modifiche dei dati devono essere partizionate.Peer-to-peer replication does not support data conflicts; data changes must be partitioned. Indipendentemente dal tipo di replica utilizzato, è consigliabile partizionare le modifiche quando possibile, in modo da ridurre l'elaborazione richiesta per il rilevamento e la risoluzione dei conflitti.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.

    Le modifiche possono essere partizionate pubblicando subset di dati in ogni Sottoscrittore oppure facendo in modo che un'applicazione indirizzi le modifiche relative a una specifica riga a uno determinato nodo: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:

    • La replica di tipo merge supporta la pubblicazione dei subset di dati utilizzando filtri con parametri con una singola pubblicazione.Merge replication supports publishing subsets of data using parameterized filters with a single publication. Per altre informazioni, vedere Parameterized Row Filters.For more information, see Parameterized Row Filters.

    • La replica transazionale supporta la pubblicazione dei subset di dati utilizzando filtri statici con più pubblicazioni.Transactional replication supports publishing subsets of data using static filters with multiple publications. Per altre informazioni, vedere Filtrare i dati pubblicati.For more information, see Filter Published Data.

  • Utilizzare i filtri di riga in modo razionale.Use row filters judiciously.

    Quando una pubblicazione transazionale include uno o più articoli che utilizzano filtri di riga, l'agente di lettura log deve applicare il filtro a ogni riga interessata da un aggiornamento relativo alla tabella durante l'analisi del log delle transazioni.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. Questo, pertanto, influisce sulla velocità effettiva dell'agente di lettura log.The throughput of the Log Reader Agent is therefore affected.

    Analogamente, la replica di tipo merge deve valutare le righe modificate o eliminate per stabilire quali Sottoscrittori devono riceverle.Similarly, merge replication must evaluate changed or deleted rows to determine which Subscribers should receive those rows. Se si utilizzano i filtri di riga per ridurre i dati richiesti da un Sottoscrittore, questo tipo di elaborazione risulta più complesso e lento rispetto alla pubblicazione di tutte le righe di una tabella.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. Tenere conto che i minori requisiti di archiviazione in ogni Sottoscrittore sono controbilanciati dalla necessità di ottimizzazione della velocità effettiva.Consider carefully the tradeoff between reduced storage requirements at each Subscriber and the need for achieving maximum throughput. Per altre informazioni sui filtri, vedere Filtrare i dati pubblicati.For more information on filtering, see Filter Published Data.

Considerazioni sulle sottoscrizioniSubscription Considerations

  • Utilizzare sottoscrizioni pull se il numero di Sottoscrittori è elevato.Use pull subscriptions when there are a large number of Subscribers.

    L'agente di distribuzione e l'agente di merge vengono eseguiti nel server di distribuzione per le sottoscrizioni push e nei Sottoscrittori per le sottoscrizioni pull.The Distribution Agent and Merge Agent run at the Distributor for push subscriptions, and at Subscribers for pull subscriptions. L'utilizzo delle sottoscrizioni pull può migliorare le prestazioni spostando l'elaborazione dell'agente dal server di distribuzione ai Sottoscrittori.Using pull subscriptions can improve performance by moving agent processing from the Distributor to Subscribers. Per altre informazioni, vedere Sottoscrivere le pubblicazioni.For more information, see Subscribe to Publications.

  • Provare a reinizializzare la sottoscrizione in caso di forte ritardo dei Sottoscrittori.Consider reinitialization of the subscription if Subscribers are too far behind.

    Se è necessario inviare ai Sottoscrittori quantità di modifiche elevate, può essere più conveniente reinizializzarle tutte con un nuovo snapshot anziché utilizzare la replica per spostare le singole modifiche.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. Per altre informazioni, vedere Reinizializzare le sottoscrizioni.For more information, see Reinitialize Subscriptions.

    Per la replica transazionale, nella scheda Comandi non distribuiti di Monitoraggio replica vengono visualizzate informazioni relative al numero di transazioni presenti nel database di distribuzione e non ancora distribuite in un Sottoscrittore e al tempo stimato per la relativa distribuzione.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. Per altre informazioni, vedere Visualizzare le informazioni ed eseguire attività relative agli agenti associati a una sottoscrizione (Monitoraggio replica).For more information, see View Information and Perform Tasks for the Agents Associated With a Subscription (Replication Monitor).

Considerazioni sugli snapshotSnapshot Considerations

  • Eseguire l'agente snapshot solo quando è necessario e non nei periodi di massima attività.Run the Snapshot Agent only when necessary and at off-peak times.

    L'agente snapshot esegue la copia bulk dei dati provenienti dalla tabella pubblicata del server di pubblicazione in un file incluso nella cartella snapshot del server di distribuzione.The Snapshot Agent bulk copies data from the published table on the Publisher to a file in the snapshot folder on the Distributor. Il processo di generazione di uno snapshot può richiedere un utilizzo elevato delle risorse e pertanto se ne sconsiglia la pianificazione nei periodi di massima attività.Generating a snapshot can be a resource intensive process and is best scheduled during off-peak times.

  • Utilizzare uno snapshot in modalità nativa a meno che non sia richiesto uno snapshot in modalità carattere.Use a native mode snapshot unless a character mode snapshot is required.

    Utilizzare lo snapshot predefinito in modalità nativa per tutti i Sottoscrittori tranne quelli non SQL ServerSQL Server e quelli che eseguono SQL Server CompactSQL Server Compact, i quali richiedono uno snapshot in modalità carattere.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.

  • Utilizzare un'unica cartella snapshot per pubblicazione.Use a single snapshot folder for a publication.

    Quando si specificano le proprietà di una pubblicazione correlate alla posizione dello snapshot, è possibile scegliere di generare file di snapshot nella cartella snapshot predefinita e/o alternativa.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. Per generare file di snapshot in entrambe le posizioni è necessario spazio di archiviazione aggiuntivo e un'ulteriore elaborazione durante l'esecuzione dell'agente snapshot.Generating snapshot files in both locations requires additional disk space and more processing when the Snapshot Agent runs.

  • Installare la cartella snapshot in un'unità locale sul server di distribuzione non utilizzata per l'archiviazione di file di database o di log.Place the snapshot folder on a drive local to the Distributor that is not used to store database or log files.

    L'agente snapshot esegue una scrittura sequenziale dei dati nella cartella snapshot.The Snapshot Agent performs a sequential write of data to the snapshot folder. Installando la cartella snapshot in un'unità separata da quella in cui risiedono i file di database o di log è possibile ridurre la contesa tra i dischi e completare più rapidamente il processo di snapshot.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.

  • Quando si crea il database di sottoscrizione nel Sottoscrittore, provare a specificare un modello di recupero con registrazione minima o con registrazione minima delle operazioni bulk.When you create the subscription database at the Subscriber, consider specifying a recovery model of simple or bulk-logged. Questo consente la registrazione minima degli inserimenti bulk eseguiti durante l'applicazione dello snapshot nel Sottoscrittore.This allows minimal logging of the bulk inserts performed during the application of the snapshot at the Subscriber. Se necessario, dopo aver applicato lo snapshot al database di sottoscrizione, è possibile passare a un modello di recupero differente (con i database replicati è consentito l'utilizzo di uno qualsiasi dei modelli di recupero).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). Per informazioni sulla selezione di un modello di recupero, vedere Panoramica del ripristino e del recupero (SQL Server).For more information about selecting a recovery model, see Restore and Recovery Overview (SQL Server).

  • Provare a utilizzare la cartella snapshot alternativa e gli snapshot compressi sui supporti rimovibili per le reti a larghezza di banda ridotta.Consider using the alternate snapshot folder and compressed snapshots on removable media for low-bandwidth networks.

    La compressione dei file di snapshot nella cartella snapshot alternativa può ridurre i requisiti di archiviazione su disco degli snapshot e semplificare il trasferimento dei file di snapshot sui supporti rimovibili.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.

    Gli snapshot compressi, in alcuni casi, consentono di migliorare le prestazioni relative al trasferimento di file di snapshot in rete.Compressed snapshots can, in some cases, improve the performance of transferring snapshot files across the network. La compressione dello snapshot richiede, tuttavia, un'ulteriore elaborazione da parte dell'agente snapshot per la generazione dei file di snapshot e da parte dell'agente di distribuzione o dell'agente di merge per l'applicazione di tali file.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. Questo può rallentare il processo di generazione degli snapshot e, in alcuni casi, aumentare il tempo necessario per applicarli.This may slow down snapshot generation and increase the time it takes to apply a snapshot in some cases. Inoltre, poiché non è possibile riprendere gli snapshot compressi in caso di errore della rete, tali snapshot non sono adatti per le reti non affidabili.Additionally, compressed snapshots cannot be resumed if a network failure occurs; therefore they are not suitable for unreliable networks. Quando si utilizzano snapshot compressi in rete, è necessario considerare tutti i pro e contro.Consider these tradeoffs carefully when using compressed snapshots across a network. Per ulteriori informazioni, vedere Alternate Snapshot Folder Locations e Compressed Snapshots.For more information, see Alternate Snapshot Folder Locations and Compressed Snapshots.

  • Provare a inizializzare una sottoscrizione manualmente.Consider initializing a subscription manually.

    In alcuni scenari, ad esempio quelli che comportano l'utilizzo di set di dati iniziali di grandi dimensioni, è preferibile inizializzare una sottoscrizione utilizzando un metodo diverso dallo snapshot.In some scenarios, such as those involving large initial datasets, it is preferable to initialize a subscription using a method other than a snapshot. Per altre informazioni, vedere Initialize a Transactional Subscription Without a Snapshot.For more information, see Initialize a Transactional Subscription Without a Snapshot.

Parametri degli agentiAgent Parameters

  • Ridurre i livelli di dettaglio degli agenti di replica eccetto durante le operazioni iniziali di verifica, monitoraggio o debug.Reduce the verbose levels of replication agents except during initial testing, monitoring, or debugging.

    Ridurre i parametri –HistoryVerboseLevel e –OutputVerboseLevel degli agenti di distribuzione o di merge.Reduce the –HistoryVerboseLevel parameter and the –OutputVerboseLevel parameter of the Distribution Agents or Merge Agents. per ridurre il numero di nuove righe inserite ai fini del rilevamento della cronologia e dell'output degli agenti.This reduces the number of new rows inserted to track agent history and output. I messaggi precedenti sulla cronologia con lo stesso stato vengono invece aggiornati in base alle nuove informazioni relative alla cronologia.Instead, previous history messages with the same status are updated to the new history information. Aumentare i livelli di dettaglio ai fini della verifica, del monitoraggio e del debug in modo da ottenere il maggior numero possibile di informazioni sull'attività degli agenti.Increase the verbose levels for testing, monitoring, and debugging so that you have as much information about agent activity as possible.

  • Usare il parametro –MaxBCPThreads dell'agente snapshot, dell'agente di merge e dell'agente di distribuzione in modo che il numero di thread specificati non superi il numero di processori installati nel computer.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). Questo parametro specifica il numero di operazioni di copia bulk che è possibile eseguire in parallelo quando lo snapshot viene creato e applicato.This parameter specifies the number of bulk copy operations that can be performed in parallel when the snapshot is created and applied.

  • Usare il parametro –UseInprocLoader dell'agente di distribuzione e dell'agente di merge, tenendo presente che non è possibile usarlo se le tabelle pubblicate includono colonne XML.Use the –UseInprocLoader parameter of the Distribution Agent and the Merge Agent (this parameter cannot be used if published tables include XML columns). Grazie alla specifica di tale parametro, l'agente utilizzerà il comando BULK INSERT al momento dell'applicazione dello snapshot.This parameter causes the agent to use the BULK INSERT command when the snapshot is applied.

    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)

  • Replication Agent Executables Concepts.Replication Agent Executables Concepts.