Repliche secondarie attive: Repliche secondarie leggibili (gruppi di disponibilità Always On)Active Secondaries: Readable Secondary Replicas (Always On Availability Groups)

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2016)noDatabase SQL di AzurenoAzure SQL Data WarehousenoParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Le funzionalità secondarie attive di Gruppi di disponibilità Always OnAlways On availability groups includono il supporto per l'accesso in sola lettura a una o più repliche secondarie (repliche secondarie leggibili).The Gruppi di disponibilità Always OnAlways On availability groups active secondary capabilities include support for read-only access to one or more secondary replicas (readable secondary replicas). Una replica secondaria leggibile consente l'accesso in sola lettura a tutti i relativi database secondari.A readable secondary replica allows read-only access to all its secondary databases. Tuttavia, i database secondari leggibili non sono impostati per la sola lettura.However, readable secondary databases are not set to read-only. Sono dinamici.They are dynamic. Un database secondario viene modificato in base ai cambiamenti apportati al database primario corrispondente.A given secondary database changes as changes on the corresponding primary database are applied to the secondary database. Per una replica secondaria tipica, i dati presenti nel database secondario, comprese le tabelle durevoli con ottimizzazione per la memoria, sono quasi in tempo reale.For a typical secondary replica, the data, including durable memory optimized tables, in the secondary databases is in near real time. Inoltre, gli indici full-text sono sincronizzati con i database secondari.Furthermore, full-text indexes are synchronized with the secondary databases. In molte circostanze, la latenza dei dati tra un database primario e il database secondario corrispondente è in genere solo di pochi secondi.In many circumstances, data latency between a primary database and the corresponding secondary database is only a few seconds.

Le impostazioni di sicurezza nei database primari vengono rese persistenti nei database secondari.Security settings that occur in the primary databases are persisted to the secondary databases. Sono inclusi utenti, ruoli del database e delle applicazioni insieme alle rispettive autorizzazioni, nonché Transparent Data Encryption (TDE), se abilitato nel database primario.This includes users, database roles, and applications roles together with their respective permissions and transparent data encryption (TDE), if enabled on the primary database.

Nota

Nonostante non sia possibile scrivere dati nei database secondari, è possibile scrivere nei database di lettura-scrittura dell'istanza del server in cui è ospitata la replica secondaria, inclusi i database utente e quelli di sistema come tempdb.Though you cannot write data to secondary databases, you can write to read-write databases on the server instance that hosts the secondary replica, including user databases and system databases such as tempdb.

Gruppi di disponibilità Always OnAlways On availability groups supporta anche il reindirizzamento delle richieste di connessione con finalità di lettura a una replica secondaria leggibile (routing di sola lettura). also supports the re-routing of read-intent connection requests to a readable secondary replica (read-only routing). Per informazioni sul routing di sola lettura, vedere Uso di un listener per connettersi a una replica secondaria di sola lettura (routing di sola lettura).For information about read-only routing, see Using a Listener to Connect to a Read-Only Secondary Replica (Read-Only Routing).

Contenuto dell'argomentoIn this Topic:

Vantaggi Benefits

L'indirizzamento di connessioni di sola lettura a repliche secondarie leggibili offre i seguenti vantaggi:Directing read-only connections to readable secondary replicas provides the following benefits:

  • Consente di scaricare i carichi di lavoro di sola lettura secondari dalla replica primaria, in cui sono conservate le relative risorse per i carichi di lavoro critici.Offloads your secondary read-only workloads from your primary replica, which conserves its resources for your mission critical workloads. In caso di carico di lavoro di lettura critico o di carico di lavoro per il quale non è possibile tollerare la latenza, si consiglia di effettuare la relativa esecuzione nella replica primaria.If you have mission critical read-workload or the workload that cannot tolerate latency, you should run it on the primary.

  • Consente di migliorare il rendimento dell'investimento per i sistemi in cui sono ospitate repliche secondarie leggibili.Improves your return on investment for the systems that host readable secondary replicas.

    Inoltre, le repliche secondarie leggibili forniscono un supporto affidabile per operazioni di sola lettura, come indicato di seguito:In addition, readable secondaries provide robust support for read-only operations, as follows:

  • Le statistiche temporanee automatiche in un database secondario leggibile consentono di ottimizzare le query di sola lettura sulle tabelle basate su disco.Automatic temporary statistics on readable secondary database optimize read-only queries on disk-based tables. Per le tabelle con ottimizzazione per la memoria, le statistiche mancanti vengono create automaticamente.For memory-optimized tables, the missing statistics are created automatically. Tuttavia, non è previsto alcun aggiornamento automatico delle statistiche non aggiornate.However, there is no auto-update of stale statistics. Sarà necessario aggiornare manualmente le statistiche nella replica primaria.You will need to manually update the statistics on the primary replica. Per altre informazioni, vedere Statisticheper i database con accesso di sola lettura più avanti in questo argomento.For more information, see Statistics for Read-Only Access Databases, later in this topic.

  • Nei carichi di lavoro di sola lettura per le tabelle basate su disco viene usato il controllo delle versioni delle righe per rimuovere la contesa di blocco nei database secondari.Read-only workloads for disk-based tables use row versioning to remove blocking contention on the secondary databases. Viene eseguito automaticamente il mapping a livello di transazioni di isolamento dello snapshot di tutte le query eseguite nei database secondari, anche quando gli altri livelli di isolamento delle transazioni sono impostati in modo esplicito.All queries that run against the secondary databases are automatically mapped to snapshot isolation transaction level, even when other transaction isolation levels are explicitly set. Tutti gli hint di blocco vengono ignorati.Also, all locking hints are ignored. In questo modo si elimina la contesa lettore/writer.This eliminates reader/writer contention.

  • I carichi di lavoro di sola lettura per le tabelle durevoli con ottimizzazione per la memoria accedono ai dati esattamente nello stesso modo in cui sono accessibili nel database primario, usando stored procedure native o l'interoperabilità SQL con le stesse limitazioni del livello di isolamento della transazione (vedere Livelli di isolamento nel motore di database).Read-only workloads for memory-optimized durable tables access the data in exactly the same way it is accessed on the primary database, using native stored procedures or SQL Interoperability with the same transaction isolation level limitations (See Isolation Levels in the Database Engine). Il carico di lavoro di report o le query di sola lettura in esecuzione nella replica primaria possono essere eseguiti nella replica secondaria senza richiedere alcuna modifica.Reporting workload or read-only queries running on the primary replica can be run on the secondary replica without requiring any changes. Analogamente, un carico di lavoro di report o le query di sola lettura in esecuzione in una replica secondaria possono essere eseguiti nella replica primaria senza richiedere alcuna modifica.Similarly, a reporting workload or read-only queries running on a secondary replica can be run on the primary replica without requiring any changes. In modo analogo alle tabelle basate su disco, viene eseguito automaticamente il mapping a livello di transazioni di isolamento dello snapshot di tutte le query eseguite nei database secondari, anche quando gli altri livelli di isolamento delle transazioni sono impostati in modo esplicito.Similar to disk-based tables, all queries that run against the secondary databases are automatically mapped to snapshot isolation transaction level, even when other transaction isolation levels are explicitly set.

  • Le operazioni DML sono consentite nelle variabili di tabella sia per i tipi di tabella basati su disco che per quelli con ottimizzazione per la memoria nella replica secondaria.DML operations are allowed on table variables both for disk-based and memory-optimized table types on the secondary replica.

Prerequisiti per il gruppo di disponibilità Prerequisites for the Availability Group

  • Repliche secondarie leggibili (obbligatorio)Readable secondary replicas (required)

    L'amministratore del database deve configurare una o più repliche in modo tale da consentire tutte le connessioni (solo per l'accesso in lettura) o solo le connessioni con finalità di lettura quando vengono eseguite nel ruolo secondario.The database administrator needs to configure one or more replicas so that, when running under the secondary role, they allow either all connections (just for read-only access) or only read-intent connections.

    Nota

    Facoltativamente, l'amministratore del database può configurare le repliche di disponibilità per escludere le connessioni in sola lettura quando l'esecuzione avviene nel ruolo primario.Optionally, the database administrator can configure any of the availability replicas to exclude read-only connections when running under the primary role.

    Per altre informazioni, vedere Informazioni sull'accesso alla connessione client per le repliche di disponibilità (SQL Server).For more information, see About Client Connection Access to Availability Replicas (SQL Server).

  • Listener del gruppo di disponibilitàAvailability group listener

    Per supportare il routing di sola lettura, un gruppo di disponibilità deve possedere un listener del gruppo di disponibilità.To support read-only routing, an availability group must possess an availability group listener. Il client in sola lettura deve indirizzare le richieste di connessione al listener e la stringa di connessione del client deve specificare la finalità dell'applicazione come in sola lettura,The read-only client must direct its connection requests to this listener, and the client's connection string must specify the application intent as "read-only." ovvero devono essere richieste di connessione con finalità di lettura.That is, they must be read-intent connection requests.

  • Routing di sola letturaRead only routing

    Conrouting di sola lettura si intende la capacità di SQL Server di instradare le richieste di connessione in ingresso con finalità di lettura dirette a un listener del gruppo di disponibilità a una replica secondaria leggibile disponibile.Read-only routing refers to the ability of SQL Server to route incoming read-intent connection requests, that are directed to an availability group listener, to an available readable secondary replica. I prerequisiti per il routing di sola lettura sono i seguenti:The prerequisites for read-only routing are as follows:

    • Per supportare il routing di sola lettura una replica secondaria leggibile richiede un URL di routing di sola lettura.To support read-only routing, a readable secondary replica requires a read-only routing URL. L'URL viene usato solo quando la replica locale viene eseguita nel ruolo secondario.This URL takes effect only when the local replica is running under the secondary role. L'URL di routing di sola lettura deve essere specificato per ogni singola replica in base alle esigenze.The read-only routing URL must be specified on a replica-by-replica basis, as needed. Ogni URL di routing di sola lettura viene usato per il routing delle richieste di connessione con finalità di lettura a una replica secondaria leggibile specifica.Each read-only routing URL is used for routing read-intent connection requests to a specific readable secondary replica. In genere, a ogni replica secondaria leggibile viene assegnato un URL di routing di sola lettura.Typically, every readable secondary replica is assigned a read-only routing URL.

    • Ogni replica di disponibilità che deve supportare il routing di sola lettura quando viene eseguita come replica primaria richiede un elenco di routing di sola lettura.Each availability replica that is to support read-only routing when it is the primary replica requires a read-only routing list. L'elenco di routing di sola lettura viene usato solo quando la replica locale viene eseguita nel ruolo primario.A given read-only routing list takes effect only when the local replica is running under the primary role. L'elenco deve essere specificato per ogni singola replica in base alle esigenze.This list must be specified on a replica-by-replica basis, as needed. In genere, ciascun elenco di routing di sola lettura deve contenere tutti gli URL di routing di sola lettura, con l'URL della replica locale alla fine dell'elenco.Typically, each read-only routing list would contain every read-only routing URL, with the URL of the local replica at the end of the list.

      Nota

      Il carico delle richieste di connessione con finalità di lettura può essere bilanciato tra le repliche.Read-intent connection requests can be load-balanced across replicas. Per altre informazioni, vedere Configurare il bilanciamento del carico tra le repliche di sola lettura.For more information, see Configure load-balancing across read-only replicas.

      Per altre informazioni, vedere Configurare il routing di sola lettura per un gruppo di disponibilità (SQL Server).For more information, see Configure Read-Only Routing for an Availability Group (SQL Server).

Nota

Per informazioni sui listener del gruppo di disponibilità e altre informazioni sul routing di sola lettura, vedere Listener del gruppo di disponibilità, connettività client e failover dell'applicazione (SQL Server).For information about availability group listeners and more information about read-only routing, see Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server).

Limitazioni e restrizioni Limitations and Restrictions

Alcune operazioni non sono completamente supportate, come indicato di seguito:Some operations are not fully supported, as follows:

  • Non appena una replica leggibile viene abilitata per la lettura, può iniziare ad accettare connessioni ai relativi database secondari.As soon as a readable replica is enabled for read, it can start accepting connections to its secondary databases. Tuttavia, se in un database primario è presente una transazione attiva, le versioni di riga non saranno completamente disponibili nel database secondario corrispondente.However, if any active transactions exist on a primary database, the row versions will not be fully available on the corresponding secondary database. È necessario eseguire il commit o il rollback di tutte le transazioni attive presenti nella replica primaria al momento della configurazione della replica secondaria.Any active transactions that existed on the primary replica when the secondary replica was configured must commit or roll back. Fino a quando questo processo non viene completato, il mapping del livello di isolamento delle transazioni nel database secondario non è completo e le query sono temporaneamente bloccate.Until this process completes, the transaction isolation level mapping on the secondary database is incomplete and queries are temporarily blocked.

    Avviso

    L'esecuzione di transazioni prolungate ha un impatto sul numero di righe con versione mantenute, sia per le tabelle basate su disco che per quelle con ottimizzazione per la memoria.Running long transactions impacts the number of versioned rows kept, both for disk-based and memory-optimized tables.

  • In un database secondario con tabelle con ottimizzazione per la memoria, anche se le versioni di riga vengono generate sempre per le tabelle con ottimizzazione per la memoria, le query vengono bloccate finché non vengono completate tutte le transazioni attive presenti nella replica primaria quando la replica secondaria è stata abilitata per la lettura.On a secondary database with memory-optimized tables, even though row versions are always generated for memory-optimized tables, queries are blocked until all active transactions that existed in the primary replica when the secondary replica was enabled for read complete. In questo modo si garantisce che sia le tabelle basate su disco che quelle con ottimizzazione per la memoria siano disponibili contemporaneamente per il carico di lavoro di report e per le query di sola lettura.This ensures that both disk-based and memory-optimized tables are available to the reporting workload and read-only queries at the same time.

  • Le funzionalità di rilevamento delle modifiche e Change Data Capture non sono supportate nei database secondari che appartengono a una replica secondaria leggibile:Change tracking and change data capture are not supported on secondary databases that belong to a readable secondary replica:

    • Il rilevamento delle modifiche è disabilitato in modo esplicito nei database secondari.Change tracking is explicitly disabled on secondary databases.

    • La funzionalità Change Data Capture non può essere abilitata solo in un database di replica secondaria.Change Data Capture cannot be enabled only on a secondary replica database. È possibile abilitare Change Data Capture nel database di replica primaria e leggere le modifiche dalle tabelle CDC usando le funzioni nel database di replica secondaria.Change Data Capture can be enabled on the primary replica database and the changes can be read from the CDC tables using the functions on the secondary replica database.

  • Dal momento che viene eseguito il mapping delle operazioni di lettura al livello di transazioni di isolamento dello snapshot, la pulizia di record fantasma nella replica primaria può essere bloccata dalle transazioni in una o più repliche secondarie.Because read operations are mapped to snapshot isolation transaction level, the cleanup of ghost records on the primary replica can be blocked by transactions on one or more secondary replicas. L'attività di pulizia di record fantasma consentirà di pulire automaticamente i record fantasma per le tabelle basate su disco nella replica primaria se non più necessari per qualsiasi replica secondaria.The ghost record cleanup task will automatically clean up the ghost records for disk-based tables on the primary replica when they are no longer needed by any secondary replica. Questa operazione è simile a quella che viene effettuata quando si eseguono transazioni nella replica primaria.This is similar to what is done when you run transaction(s) on the primary replica. In caso estremo, nel database secondario sarà necessario terminare una query di lettura a esecuzione prolungata nella replica secondaria tramite cui si blocca la pulizia fantasma.In the extreme case on the secondary database, you will need to kill a long running read-query that is blocking the ghost cleanup. Si noti che la pulizia fantasma può essere bloccata se la replica secondaria è disconnessa o quando lo spostamento dati è sospeso nel database secondario.Note, the ghost clean can be blocked if the secondary replica gets disconnected or when data movement is suspended on the secondary database. Questo stato impedisce inoltre il troncamento del log, pertanto se lo stato persiste, si consiglia di rimuovere il database secondario dal gruppo di disponibilità.This state also prevents log truncation, so if this state persists, we recommend that you remove this secondary database from the availability group. Non esiste alcun problema di pulizia di record fantasma con le tabelle con ottimizzazione per la memoria perché le versioni di riga vengono mantenute nella memoria e sono indipendenti dalle versioni di riga nella replica primaria.There is no ghost record cleanup issue with memory-optimized tables because the row versions are kept in memory and are independent of the row versions on the primary replica.

  • Potrebbe verificarsi un errore durante l'operazione DBCC SHRINKFILE nei file contenenti le tabelle basate su disco nella replica primaria se nel file sono contenuti record fantasma ancora necessari in una replica secondaria.The DBCC SHRINKFILE operation on files containing disk-based tables might fail on the primary replica if the file contains ghost records that are still needed on a secondary replica.

  • A partire da SQL Server 2014SQL Server 2014, le repliche secondarie leggibili possono rimanere online anche quando la replica primaria è offline a causa di un errore o di un'azione dell'utente.Beginning in SQL Server 2014SQL Server 2014, readable secondary replicas can remain online even when the primary replica is offline due to user action or a failure. Tuttavia, il routing di sola lettura non funziona in questa situazione perché il listener del gruppo di disponibilità è offline.However, read-only routing does not work in this situation because the availability group listener is offline as well. I client devono connettersi direttamente alle repliche secondarie di sola lettura per i carichi di lavoro in sola lettura.Clients must connect directly to the read-only secondary replicas for read-only workloads.

Nota

Se si esegue una query sulla DMV sys.dm_db_index_physical_stats in un'istanza del server che ospita una replica secondaria leggibile, potrebbe verificarsi un problema di blocco della fase di rollforward.If you query the sys.dm_db_index_physical_stats dynamic management view on a server instance that is hosting a readable secondary replica, you might encounter a REDO blocking issue. Questa condizione si verifica perché la DMV acquisisce un blocco IS nella vista o nella tabella utente specificata che può bloccare le richieste di una fase di rollforward per un blocco X presente in tale vista o tabella utente.This is because this dynamic management view acquires an IS lock on the specified user table or view that can block requests by a REDO thread for an X lock on that user table or view.

Considerazioni sulle prestazioni Performance Considerations

In questa sezione si illustrano le diverse considerazioni sulle prestazioni relative ai database secondari leggibili.This section discusses several performance considerations for readable secondary databases

Contenuto della sezioneIn This Section:

Latenza dei dati Data Latency

L'implementazione dell'accesso di sola lettura alle repliche secondarie è utile qualora i carichi di lavoro di sola lettura possono tollerare una certa latenza dei dati.Implementing read-only access to secondary replicas is useful if your read-only workloads can tolerate some data latency. Nelle situazioni in cui la latenza dei dati non può essere accettata, si consideri la possibilità di eseguire i carichi di lavoro di sola lettura nella replica primaria.In situations where data latency is unacceptable, consider running read-only workloads against the primary replica.

I record di log delle modifiche sul database primario vengono inviati dalla replica primaria alle repliche secondarie.The primary replica sends log records of changes on primary database to the secondary replicas. In ogni database secondario i record di log vengono applicati tramite un thread della fase di rollforward dedicato.On each secondary database, a dedicated redo thread applies the log records. In un database secondario di accesso in lettura, una modifica ai dati specificata non viene visualizzata nei risultati della query fino a quando il record di log, in cui è contenuta la modifica, non sarà stato applicato al database secondario e non è stato eseguito il commit della transazione nel database primario.On a read-access secondary database, a given data change does not appear in query results until the log record that contains the change has been applied to the secondary database and the transaction has been committed on primary database.

Ciò significa che si verifica della latenza, in genere solo pochi secondi, tra la replica primaria e quella secondaria.This means that there is some latency, usually only a matter of seconds, between the primary and secondary replicas. In rari casi, tuttavia, ad esempio se problemi di rete compromettono la velocità effettiva, la latenza può diventare significativa.In unusual cases, however, for example if network issues reduce throughput, latency can become significant. La latenza aumenta quando si verificano colli di bottiglia I/O e quando viene sospeso lo spostamento dati.Latency increases when I/O bottlenecks occur and when data movement is suspended. Per monitorare lo spostamento dati sospeso, è possibile usare il dashboard Always On o la DMV sys.dm_hadr_database_replica_states .To monitor suspended data movement, you can use the Always On Dashboard or the sys.dm_hadr_database_replica_states dynamic management view.

Latenza dei dati nei database con tabelle con ottimizzazione per la memoria Data Latency on databases with memory-optimized tables

SQL Server 2014SQL Server 2014 prevede alcune considerazioni speciali in relazione alla latenza dei dati per le repliche secondarie attive (vedere SQL Server 2014SQL Server 2014Repliche secondarie attive: Repliche secondarie leggibili).In SQL Server 2014SQL Server 2014 there were special considerations around data latency on active secondaries - see SQL Server 2014SQL Server 2014 Active Secondaries: Readable Secondary Replicas. A partire da SQL Server 2016SQL Server 2016 , non esistono considerazioni speciali in relazione alla latenza dei dati per le tabelle con ottimizzazione per la memoria.Starting SQL Server 2016SQL Server 2016 there are no special considerations around data latency for memory-optimized tables. La latenza dei dati prevista per le tabelle con ottimizzazione per la memoria è paragonabile a quella per le tabelle basate su disco.The expected data latency for memory-optimized tables is comparable to the latency for disk-based tables.

Impatto sui carichi di lavoro di sola lettura Read-Only Workload Impact

Quando si configura una replica secondaria per l'accesso di sola lettura, nei carichi di lavoro di sola lettura dei database secondari si usano le risorse di sistema, ad esempio CPU e I/O (per le tabella basate su disco) dai thread della fase di rollforward, soprattutto se i carichi di lavoro di sola lettura nelle tabelle basate su disco prevedono l'esecuzione di molte operazioni di I/O.When you configure a secondary replica for read-only access, your read-only workloads on the secondary databases consume system resources, such as CPU and I/O (for disk-based tables) from redo threads, especially if the read-only workloads on disk-based tables are highly I/O-intensive. Non esiste alcun impatto I/O quando si accede alle tabelle con ottimizzazione per la memoria perché tutte le righe si trovano in memoria.There is no IO impact when accessing memory-optimized tables because all the rows reside in memory.

Inoltre, i carichi di lavoro di sola lettura nelle repliche secondarie possono bloccare le modifiche DDL (Data Definition Language) applicate tramite record di log.Also, read-only workloads on the secondary replicas can block data definition language (DDL) changes that are applied through log records.

  • Anche se nelle operazioni di lettura non si accettano i blocchi condivisi a causa del controllo delle versioni delle righe, in queste operazioni si accettano i blocchi di stabilità dello schema (Sch-S) che possono bloccare le operazioni di rollforward tramite cui si applicano le modifiche DDL.Even though the read operations do not take shared locks because of row versioning, these operations take schema stability (Sch-S) locks, which can block redo operations that are applying DDL changes. Le operazioni DDL includono operazioni ALTER/DROP di tabelle e viste ma non operazioni DROP o ALTER di stored procedure.DDL operations include ALTER/DROP tables and Views but not DROP or ALTER of stored procedures. Se, quindi, ad esempio si elimina una tabella basata su disco o con ottimizzazione per la memoria nel database primario,So for example, if you drop a table disk-based or memory-optimized, on primary. quando il thread della fase di rollforward elabora il record del log per eliminare la tabella, deve acquisire un blocco SCH_M nella tabella e può essere bloccato da una query in esecuzione che accede alla tabella.When REDO thread processes the log record to drop the table, it must acquire a SCH_M lock on the table and can get blocked by a running query accessing table. Si tratta dello stesso comportamento della replica primaria con la differenza che l'eliminazione della tabella viene eseguita come parte di una sessione utente e non di un thread della fase di rollforward.This is the same behavior on primary replica except that the drop of the table is done as part of a user session and not REDO thread.

  • Per le tabelle con ottimizzazione per la memoria sono previsti blocchi aggiuntivi.There is additional blocking Memory-Optimized Tables. Eliminare una stored procedure nativa può comportare il blocco del thread della fase di rollforward se avviene l'esecuzione simultanea della stored procedure nativa nella replica secondaria.A drop of native stored procedure can cause REDO thread to block if there is a concurrent execution of the native stored procedure on the secondary replica. Si tratta dello stesso comportamento della replica primaria con la differenza che l'eliminazione della stored procedure viene eseguita come parte di una sessione utente e non di un thread della fase di rollforward.This is the same behavior on the primary replica except that the drop of the stored procedure is done as part of a user session and not REDO thread.

    Valutare le procedure consigliate relative alla compilazione delle query e applicarle ai database secondari.Be aware of best practices around building queries, and exercise those best practices in the secondary databases. Pianificare, ad esempio, le query a lunga esecuzione come aggregazioni di dati durante i periodi di minore attività.For example, schedule long-running queries such as aggregations of data during times of low activity.

Nota

Se un thread della fase di rollforward è bloccato da query in una replica secondaria, viene generato l'oggetto XEvent sqlserver.lock_redo_blocked .If a redo thread is blocked by queries on a secondary replica, the sqlserver.lock_redo_blocked XEvent is raised.

Indicizzazione Indexing

Per ottimizzare i carichi di lavoro di sola lettura nelle repliche secondarie leggibili, è possibile creare indici nelle tabelle dei database secondari.To optimize read-only workloads on the readable secondary replicas, you may want to create indexes on the tables in the secondary databases. Poiché non è possibile apportare modifiche allo schema o ai dati nei database secondari, creare indici nei database primari e consentire il trasferimento delle modifiche al database secondario attraverso il processo di rollforward.Because you cannot make schema or data changes on the secondary databases, create indexes in the primary databases and allow the changes to transfer to the secondary database through the redo process.

Per monitorare l'attività di utilizzo dell'indice in una replica secondaria, eseguire una query sulle colonne user_seeks, user_scanse user_lookups della DMV sys.dm_db_index_usage_stats .To monitor index usage activity on a secondary replica, query the user_seeks, user_scans, and user_lookups columns of the sys.dm_db_index_usage_stats dynamic management view.

Statistiche Statistics for Read-Only Access Databases

Le statistiche sulle colonne di tabelle e viste indicizzate vengono usate per ottimizzare i piani di query.Statistics on columns of tables and indexed views are used to optimize query plans. Per i gruppi di disponibilità, le statistiche create e gestite nei database primari vengono rese automaticamente persistenti nei database secondari come parte dell'applicazione dei record di log delle transazioni.For availability groups, statistics that are created and maintained on the primary databases are automatically persisted on the secondary databases as part of applying the transaction log records. Tuttavia, è possibile che per il carico di lavoro di sola lettura nei database secondari siano richieste statistiche diverse rispetto a quelle create nei database primari.However, the read-only workload on the secondary databases may need different statistics than those that are created on the primary databases. Ad ogni modo, poiché i database secondari sono limitati all'accesso di sola lettura, non è possibile creare statistiche nei database secondari.However, because secondary databases are restricted to read-only access, statistics cannot be created on the secondary databases.

Per risolvere il problema, le statistiche temporanee per i database secondari vengono create e gestite dalla replica secondaria in tempdb.To address this problem, the secondary replica creates and maintains temporary statistics for secondary databases in tempdb. Il suffisso _readonly_database_statistic viene aggiunto al nome delle statistiche temporanee per distinguerle da quelle permanenti rese persistenti dal database primario.The suffix _readonly_database_statistic is appended to the name of temporary statistics to differentiate them from the permanent statistics that are persisted from the primary database.

Solo in SQL ServerSQL Server è possibile creare e aggiornare le statistiche temporanee.Only SQL ServerSQL Server can create and update temporary statistics. È tuttavia possibile eliminare le statistiche temporanee e monitorare le relative proprietà usando gli stessi strumenti usati per le statistiche permanenti:However, you can delete temporary statistics and monitor their properties using the same tools that you use for permanent statistics:

  • Eliminare le statistiche temporanee usando l'istruzione DROP STATISTICS Transact-SQLTransact-SQL .Delete temporary statistics using the DROP STATISTICS Transact-SQLTransact-SQL statement.

  • Monitorare le statistiche usando le viste del catalogo sys.stats e sys.stats_columns .Monitor statistics using the sys.stats and sys.stats_columns catalog views. sys_stats include una colonna, is_temporary, che indica quali statistiche sono permanenti e quali invece temporanee.sys_stats includes a column, is_temporary, to indicate which statistics are permanent and which are temporary.

    L'aggiornamento automatico delle statistiche per le tabelle con ottimizzazione per la memoria nella replica primaria o secondaria non è supportato.There is no support for auto-statistics update for memory-optimized tables on the primary or secondary replica. È necessario monitorare i piani e le prestazioni delle query nella replica secondaria e aggiornare manualmente le statistiche nella replica primaria quando necessario.You must monitor query performance and plans on the secondary replica and manually update the statistics on the primary replica when needed. Tuttavia, le statistiche mancanti vengono create automaticamente sia nella replica primaria che in quella secondaria.However, the missing statistics are automatically created both on primary and secondary replica.

    Per altre informazioni sulle statistiche di SQL Server, vedere Statistiche.For more information about SQL Server statistics, see Statistics.

    Contenuto della sezioneIn This Section:

  • Statistiche permanenti non aggiornate nei database secondariStale Permanent Statistics on Secondary Databases

  • Limitazioni e restrizioniLimitations and Restrictions

Statistiche permanenti non aggiornate nei database secondari Stale Permanent Statistics on Secondary Databases

SQL ServerSQL Server è possibile rilevare situazioni in cui le statistiche permanenti in un database secondario non sono aggiornate. detects when permanent statistics on a secondary database are stale. Tuttavia non è possibile apportare le modifiche alle statistiche permanenti se non modificando il database primario.But changes cannot be made to the permanent statistics except through changes on the primary database. Per l'ottimizzazione query, in SQL ServerSQL Server è possibile creare statistiche temporanee per le tabelle basate su disco nel database secondario e usarle al posto di quelle permanenti non aggiornate.For query optimization, SQL ServerSQL Server creates temporary statistics for disk-based tables on the secondary database and uses these statistics instead of the stale permanent statistics.

Quando le statistiche permanenti vengono aggiornate nel database primario, vengono rese automaticamente persistenti nel database secondario.When the permanent statistics are updated on the primary database, they are automatically persisted to the secondary database. In SQL ServerSQL Server è quindi possibile usare le statistiche permanenti aggiornate che sono più recenti delle statistiche temporanee.Then SQL ServerSQL Server uses the updated permanent statistics, which are more current than the temporary statistics.

Se si esegue il failover del gruppo di disponibilità, le statistiche temporanee vengono eliminate in tutte le repliche secondarie.If the availability group fails over, temporary statistics are deleted on all of the secondary replicas.

Limitazioni e restrizioni Limitations and Restrictions

  • Poiché le statistiche temporanee sono archiviate in tempdb, un riavvio del servizio SQL ServerSQL Server comporta l'indisponibilità di tutte le statistiche temporanee.Because temporary statistics are stored in tempdb, a restart of the SQL ServerSQL Server service causes all temporary statistics to disappear.

  • Il suffisso _readonly_database_statistic è riservato alle statistiche generate da SQL ServerSQL Server.The suffix _readonly_database_statistic is reserved for statistics generated by SQL ServerSQL Server. Non è possibile usare questo suffisso quando si creano statistiche in un database primario.You cannot use this suffix when creating statistics on a primary database. Per altre informazioni, vedere Statistics.For more information, see Statistics.

Accesso alle tabelle con ottimizzazione per la memoria in una replica secondaria Accessing memory-optimized tables on a Secondary Replica

Con le tabelle con ottimizzazione per la memoria in una replica secondaria possono essere usati gli stessi livelli di isolamento delle transazioni usati nella replica primaria.The transaction isolation levels that can be used with memory-optimized tables on a secondary replica are the same as on the primary replica. È consigliabile impostare il livello di isolamento a livello di sessione su READ COMMITTED e l'opzione a livello di database MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT su ON.The recommendation is to set the session-level isolation level to READ COMMITTED and set the database-level option MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT to ON. Esempio:For example:

ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT=ON  
GO  
SET TRANSACTION ISOLATION LEVEL READ COMMITTED  
GO  
SELECT SUM(UnitPrice*OrderQty)   
FROM Sales.SalesOrderDetail_inmem  
GO  

Considerazioni sulla pianificazione della capacità Capacity Planning Considerations

  • In caso di tabelle basate su disco, le repliche secondarie leggibili possono richiedere spazio in tempdb per due motivi:In the case of disk-based tables, readable secondary replicas can require space in tempdb for two reasons:

    • Le versioni di riga vengono copiate dal livello di isolamento dello snapshot in tempdb.Snapshot isolation level copies row versions into tempdb.

    • Le statistiche temporanee per i database secondari vengono create e mantenute in tempdb.Temporary statistics for secondary databases are created and maintained in tempdb. Le statistiche temporanee possono provocare un lieve aumento delle dimensioni di tempdb.The temporary statistics can cause a slight increase in the size of tempdb. Per altre informazioni, vedere Statistiche per i database con accesso di sola letturapiù avanti in questa sezione.For more information, see Statistics for Read-Only Access Databases, later in this section.

  • Quando si configura l'accesso in lettura per una o più repliche secondarie, nei database primari vengono aggiunti 14 byte di overhead sulle righe di dati eliminate, modificate o inserite per archiviare i puntatori alle versioni di riga nei database secondari per le tabelle basate su disco.When you configure read-access for one or more secondary replicas, the primary databases add 14 bytes of overhead on deleted, modified, or inserted data rows to store pointers to row versions on the secondary databases for disk-based tables. L'overhead di 14 byte viene trasferito ai database secondari.This 14-byte overhead is carried over to the secondary databases. Poiché l'overhead di 14 byte viene aggiunto alle righe di dati, è possibile che si verifichino divisioni di pagina.As the 14-byte overhead is added to data rows, page splits might occur.

    I dati della versione di riga non sono generati dai database primari.The row version data is not generated by the primary databases. Al contrario, i database secondari generano le versioni di riga.Instead, the secondary databases generate the row versions. Tuttavia, il controllo delle versioni delle righe aumenta l'archiviazione dei dati nei database primari e secondari.However, row versioning increases data storage in both the primary and secondary databases.

    L'aggiunta dei dati della versione di riga dipende dall'impostazione del livello di isolamento dello snapshot o di isolamento dello snapshot Read committed sul database primario.The addition of the row version data depends on the snapshot isolation or read-committed snapshot isolation (RCSI) level setting on the primary database. Nella tabella seguente viene descritto il comportamento del controllo delle versioni in un database secondario leggibile con impostazioni diverse per le tabelle basate su disco.The table below describes the behavior of versioning on a readable secondary database under different settings for disk based tables.

    Replica secondaria leggibile?Readable secondary replica? L'isolamento dello snapshot o l'isolamento dello snapshot Read Committed è abilitato?Snapshot isolation or RCSI level enabled? Database primarioPrimary Database Database secondarioSecondary Database
    NoNo NoNo Nessuna versione di riga né overhead di 14 byteNo row versions or 14-byte overhead Nessuna versione di riga né overhead di 14 byteNo row versions or 14-byte overhead
    NoNo Yes Versioni di riga e overhead di 14 byteRow versions and 14-byte overhead Nessuna versione di riga, ma overhead di 14 byteNo row versions, but 14-byte overhead
    Yes NoNo Nessuna versione di riga, ma overhead di 14 byteNo row versions, but 14-byte overhead Versioni di riga e overhead di 14 byteRow versions and 14-byte overhead
    Yes Yes Versioni di riga e overhead di 14 byteRow versions and 14-byte overhead Versioni di riga e overhead di 14 byteRow versions and 14-byte overhead

Vedere ancheSee Also

Panoramica di Gruppi di disponibilità Always On (SQL Server) Overview of Always On Availability Groups (SQL Server)
Informazioni sull'accesso alla connessione client per le repliche di disponibilità (SQL Server) About Client Connection Access to Availability Replicas (SQL Server)
Listener del gruppo di disponibilità, connettività client e failover dell'applicazione (SQL Server) Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server)
StatisticheStatistics