Usare le repliche di sola lettura per i carichi di lavoro di bilanciamento del carico query di sola letturaUse read-only replicas to load-balance read-only query workloads

Nota

Questo articolo è stato aggiornato per usare il nuovo modulo Az di Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. È comunque possibile usare il modulo AzureRM, che continuerà a ricevere correzioni di bug almeno fino a dicembre 2020.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Per altre informazioni sul nuovo modulo Az e sulla compatibilità di AzureRM, vedere Introduzione del nuovo modulo Az di Azure PowerShell.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Per istruzioni sull'installazione del modulo Az, vedere Installare Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

Durante la architettura a disponibilità elevata, viene automaticamente eseguito il provisioning di ogni database nel livello di servizio Premium, Business Critical o con scalabilità elevatissima con una replica primaria e più repliche secondarie.As part of the High Availability architecture, each database in the Premium, Business Critical or Hyperscale service tier is automatically provisioned with a primary replica and several secondary replicas. Le repliche secondarie vengono effettuato il provisioning con le stesse dimensioni di calcolo come replica primaria.The secondary replicas are provisioned with the same compute size as the primary replica. Il scalabilità in lettura funzionalità consente di bilanciare il carico del Database SQL sola lettura dei carichi di lavoro usando la capacità di una delle repliche di sola lettura invece di condividere la replica di lettura / scrittura.The Read Scale-Out feature allows you to load-balance SQL Database read-only workloads using the capacity of one of the read-only replicas instead of sharing the read-write replica. In questo modo i carichi di lavoro di sola lettura verranno isolati dal carico di lavoro principale di lettura/scrittura e non ne comprometteranno le prestazioni.This way the read-only workload will be isolated from the main read-write workload and will not affect its performance. La funzionalità è previsto per le applicazioni che includono logicamente separati da sola lettura i carichi di lavoro, ad esempio analitica.The feature is intended for the applications that include logically separated read-only workloads, such as analytics. È possibile migliorare le prestazioni usando questa ulteriore capacità senza costi aggiuntivi.They could gain performance benefits using this additional capacity at no extra cost.

Il diagramma seguente illustra usando un database Business Critical.The following diagram illustrates it using a Business Critical database.

Repliche di sola lettura

La funzionalità di scalabilità orizzontale in lettura è abilitata per impostazione predefinita nei nuovi Premium, Business Critical e i database su scala molto vasta.The Read Scale-Out feature is enabled by default on new Premium, Business Critical, and Hyperscale databases. Se la stringa di connessione SQL è configurata con ApplicationIntent=ReadOnly, verrà reindirizzata all'applicazione da parte del gateway a una replica di sola lettura di tale database.If your SQL connection string is configured with ApplicationIntent=ReadOnly, the application will be redirected by the gateway to a read-only replica of that database. Per informazioni su come usare il ApplicationIntent proprietà, vedere finalità dell'applicazione specificando.For information on how to use the ApplicationIntent property, see Specifying Application Intent.

Se si vuole assicurare che l'applicazione si connette alla replica primaria indipendentemente il ApplicationIntent impostazione nella stringa di connessione SQL, è necessario disabilitare in modo esplicito lettura scalabilità orizzontale durante la creazione del database o quando si modifica la configurazione.If you wish to ensure that the application connects to the primary replica regardless of the ApplicationIntent setting in the SQL connection string, you must explicitly disable read scale-out when creating the database or when altering its configuration. Ad esempio, se si aggiorna il database dal livello Standard o generico al livello Premium, Business Critical o con Iperscalabilità e si desidera assicurarsi che tutte le connessioni continuano passare alla replica primaria, disabilitare la scalabilità in lettura. Per informazioni dettagliate sul modo in cui disabilitarli, vedere abilitare e disabilitare la scalabilità in lettura.For example, if you upgrade your database from Standard or General Purpose tier to Premium, Business Critical or Hyperscale tier and want to make sure all your connections continue to go to the primary replica, disable Read Scale-out. For details on how to disable it, see Enable and disable Read Scale-Out.

Nota

Query Data Store, gli eventi estesi, Profiler SQL e le funzionalità di controllo non sono supportate nelle repliche di sola lettura.Query Data Store, Extended Events, SQL Profiler and Audit features are not supported on the read-only replicas.

Coerenza dei datiData consistency

Uno dei vantaggi delle repliche è che sono sempre in uno stato coerente a livello di transazione. Per temporizzazioni diverse potrebbe però verificarsi una breve latenza tra le diverse repliche.One of the benefits of replicas is that the replicas are always in the transactionally consistent state, but at different points in time there may be some small latency between different replicas. La scalabilità in lettura supporta la coerenza a livello di sessione.Read Scale-Out supports session-level consistency. Significa che, se la sessione di sola lettura si riconnette dopo un errore di connessione causato dalla mancata disponibilità della replica, potrebbe essere reindirizzato a una replica che non è aggiornata con la replica di lettura / scrittura al 100%.It means, if the read-only session reconnects after a connection error caused by replica unavailability, it may be redirected to a replica that is not 100% up-to-date with the read-write replica. Analogamente, se un'applicazione scrive i dati usando una sessione di lettura / scrittura e li legge immediatamente usando una sessione di sola lettura, è possibile che gli aggiornamenti più recenti non sono immediatamente visibili nella replica.Likewise, if an application writes data using a read-write session and immediately reads it using a read-only session, it is possible that the latest updates are not immediately visible on the replica. La latenza è causata da un'operazione di ripristino di log delle transazioni asincrona.The latency is caused by an asynchronous transaction log redo operation.

Nota

Le latenze di replica nell'area sono basse e questa situazione è rara.Replication latencies within the region are low and this situation is rare.

Connettersi a una replica di sola letturaConnect to a read-only replica

Quando si abilita la scalabilità in lettura per un database, l'opzione ApplicationIntent nella stringa di connessione fornita dal client indica se la connessione viene instradata alla replica in scrittura o a una replica di sola lettura.When you enable Read Scale-Out for a database, the ApplicationIntent option in the connection string provided by the client dictates whether the connection is routed to the write replica or to a read-only replica. In particolare, se il valore di ApplicationIntent è ReadWrite (valore predefinito), la connessione verrà indirizzata alla replica di lettura/scrittura del database.Specifically, if the ApplicationIntent value is ReadWrite (the default value), the connection will be directed to the database’s read-write replica. È un comportamento identico a quello esistente.This is identical to existing behavior. Se il valore di ApplicationIntent è ReadOnly, la connessione viene instradata a una replica di sola lettura.If the ApplicationIntent value is ReadOnly, the connection is routed to a read-only replica.

La stringa di connessione seguente, ad esempio, connette il client a una replica di sola lettura (sostituendo gli elementi nelle parentesi acute con i valori corretti per l'ambiente ed eliminando le parentesi acute):For example, the following connection string connects the client to a read-only replica (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadOnly;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

Entrambe la stringhe di connessione seguenti connettono il client a una replica di lettura/scrittura (sostituendo gli elementi nelle parentesi acute con i valori corretti per l'ambiente ed eliminando le parentesi acute):Either of the following connection strings connects the client to a read-write replica (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadWrite;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

Verificare di essere connessi a una replica di sola letturaVerify that a connection is to a read-only replica

È possibile verificare se si è connessi a una replica di sola lettura eseguendo la query seguente.You can verify whether you are connected to a read-only replica by running the following query. Verrà restituito READ_ONLY quando si è connessi a una replica di sola lettura.It will return READ_ONLY when connected to a read-only replica.

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability')

Nota

In un determinato momento solo una delle repliche AlwaysOn è accessibile per le sessioni ReadOnly.At any given time only one of the AlwaysON replicas is accessible by the ReadOnly sessions.

Monitoraggio e risoluzione dei problemi di replica di sola letturaMonitoring and troubleshooting read-only replica

Quando si è connessi a una replica di sola lettura, è possibile accedere a metriche di prestazioni usando il sys.dm_db_resource_stats DMV.When connected to a read-only replica, you can access the performance metrics using the sys.dm_db_resource_stats DMV. Per accedere alle statistiche sul piano di query, usare il sys.dm_exec_query_stats, sys.dm_exec_query_plan e sys.dm_exec_sql_text viste a gestione dinamica.To access query plan statistics, use the sys.dm_exec_query_stats, sys.dm_exec_query_plan and sys.dm_exec_sql_text DMVs.

Nota

La vista DMV sys.resource_stats nel database master logico restituisce i dati di archiviazione e di utilizzo della CPU della replica primaria.The DMV sys.resource_stats in the logical master database returns CPU usage and storage data of the primary replica.

Abilitare e disabilitare la scalabilità in letturaEnable and disable Read Scale-Out

Lettura Scale-Out è abilitata per impostazione predefinita nei livelli di servizio Premium, Business Critical e su scala molto vasta.Read Scale-Out is enabled by default on Premium, Business Critical and Hyperscale service tiers. Scalabilità orizzontale in lettura non è possibile abilitare nei livelli di servizio Basic, Standard o generico.Read Scale-Out cannot be enabled in Basic, Standard, or General Purpose service tiers. Scalabilità orizzontale in lettura viene disabilitato automaticamente nei database con scalabilità elevatissima configurati con 0 repliche.Read Scale-Out is automatically disabled on Hyperscale databases configured with 0 replicas.

È possibile disabilitare e riabilitare Scale-Out di lettura sul database singoli e pool di database elastici nel livello di servizio Premium o Business Critical usando i metodi seguenti.You can disable and re-enable Read Scale-Out on single databases and elastic pool databases in Premium or Business Critical service tier using the following methods.

Nota

La possibilità di disabilitare la scalabilità in lettura viene fornita per compatibilità con le versioni precedenti.The ability to disable Read Scale-Out is provided for backward compatibility.

Portale di AzureAzure portal

È possibile gestire l'impostazione di lettura Sacle orizzontale nella configura pannello del database.You can manage the Read Sacle-out setting on the Configure database blade.

PowerShellPowerShell

Per gestire la scalabilità in lettura in Azure PowerShell, è necessaria la versione di Azure PowerShell di dicembre 2016 o una successiva.Managing Read Scale-Out in Azure PowerShell requires the December 2016 Azure PowerShell release or newer. Per la versione più recente di PowerShell, vedere Azure PowerShell.For the newest PowerShell release, see Azure PowerShell.

È possibile disabilitare o riabilitare lettura Scale-Out in Azure PowerShell richiamando il Set-AzSqlDatabase cmdlet e passando il valore desiderato – Enabled o Disabled -per il -ReadScale parametro.You can disable or re-enable Read Scale-Out in Azure PowerShell by invoking the Set-AzSqlDatabase cmdlet and passing in the desired value – Enabled or Disabled -- for the -ReadScale parameter.

Per disabilitare la scalabilità di lettura su un database esistente (sostituendo gli elementi nelle parentesi acute con i valori corretti per l'ambiente ed eliminando le parentesi acute):To disable read scale-out on an existing database (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

Set-AzSqlDatabase -ResourceGroupName <myresourcegroup> -ServerName <myserver> -DatabaseName <mydatabase> -ReadScale Disabled

Per disabilitare la lettura di scalabilità orizzontale in un nuovo database (sostituendo gli elementi nelle parentesi acute con i valori corretti per l'ambiente ed eliminando le parentesi acute):To disable read scale-out on a new database (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

New-AzSqlDatabase -ResourceGroupName <myresourcegroup> -ServerName <myserver> -DatabaseName <mydatabase> -ReadScale Disabled -Edition Premium

Per riabilitare la lettura di scalabilità orizzontale in un database esistente (sostituendo gli elementi nelle parentesi acute con i valori corretti per l'ambiente ed eliminando le parentesi acute):To re-enable read scale-out on an existing database (replacing the items in the angle brackets with the correct values for your environment and dropping the angle brackets):

Set-AzSqlDatabase -ResourceGroupName <myresourcegroup> -ServerName <myserver> -DatabaseName <mydatabase> -ReadScale Enabled

API RESTREST API

Per creare un database con la lettura scalabilità disabilitata, o per modificare l'impostazione per un database esistente, usare il metodo seguente con il readScale impostata su Enabled o Disabled come nella richiesta di esempio seguente.To create a database with read scale-out disabled, or to change the setting for an existing database, use the following method with the readScale property set to Enabled or Disabled as in the below sample request.

Method: PUT
URL: https://management.azure.com/subscriptions/{SubscriptionId}/resourceGroups/{GroupName}/providers/Microsoft.Sql/servers/{ServerName}/databases/{DatabaseName}?api-version= 2014-04-01-preview
Body:
{
   "properties":
   {
      "readScale":"Disabled"
   }
}

Per altre informazioni, vedere Databases - Create or Update (Database - Creare o aggiornare).For more information, see Databases - Create or Update.

Uso di TempDB nella replica di sola letturaUsing TempDB on read-only replica

Il database TempDB non viene replicato per le repliche di sola lettura.The TempDB database is not replicated to the read-only replicas. Ogni replica ha la propria versione del database TempDB che viene creato durante la creazione della replica.Each replica has its own version of TempDB database that is created when the replica is created. Assicura che TempDB è aggiornabile e possono essere modificati durante l'esecuzione della query.It ensures that TempDB is updateable and can be modified during your query execution. Se il carico di lavoro di sola lettura si basa sull'utilizzo di TempDB oggetti, è necessario creare questi oggetti nell'ambito dello script di query.If your read-only workload depends on using TempDB objects, you should create these objects as part of your query script.

Uso della scalabilità in lettura con database con replica geograficaUsing Read Scale-Out with geo-replicated databases

Se si usa Scale-Out di lettura per il bilanciamento del carico ReadOnly carichi di lavoro in un database con replica geografica (ad esempio un membro di un gruppo di failover), assicurarsi che tale tipo lettura scale-out è abilitata sia il database primario sia per i database secondari con replica geografica.If you are using Read Scale-Out to load-balance read-only workloads on a database that is geo-replicated (for example, as a member of a failover group), make sure that read scale-out is enabled on both the primary and the geo-replicated secondary databases. Questa configurazione assicura che la stessa esperienza di bilanciamento del carico continua quando l'applicazione si connette al nuovo database primario dopo il failover.This configuration will ensure that the same load-balancing experience continues when your application connects to the new primary after failover. Se ci si connette al database secondario con replica geografica con scalabilità in lettura abilitata, le sessioni con ApplicationIntent=ReadOnly saranno indirizzate a una delle repliche nello stesso modo in cui le connessioni sono state indirizzate al database primario.If you are connecting to the geo-replicated secondary database with read-scale enabled, your sessions with ApplicationIntent=ReadOnly will be routed to one of the replicas the same way we route connections on the primary database. Le sessioni senza ApplicationIntent=ReadOnly verranno indirizzate alla replica primaria del database secondario con replica geografica, anche questa di sola lettura.The sessions without ApplicationIntent=ReadOnly will be routed to the primary replica of the geo-replicated secondary, which is also read-only. Poiché i database secondari con replica geografica ha un endpoint diverso da quello del database primario, in passato per accedere al database secondario non è stata deve impostare ApplicationIntent=ReadOnly.Because geo-replicated secondary database has a different endpoint than the primary database, historically to access the secondary it wasn't required to set ApplicationIntent=ReadOnly. Per garantire la compatibilità con le versioni precedenti, DMV sys.geo_replication_links mostra secondary_allow_connections=2, che indica che qualsiasi connessione client è consentita.To ensure backward compatibility, sys.geo_replication_links DMV shows secondary_allow_connections=2 (any client connection is allowed).

Nota

Round robin o qualsiasi altro carico bilanciato routing tra le repliche del database secondario locale non è supportato.Round-robin or any other load-balanced routing between the local replicas of the secondary database is not supported.

Passaggi successiviNext steps