Usar réplicas somente leitura para balancear a carga de cargas de trabalho de consulta somente leituraUse read-only replicas to load-balance read-only query workloads

Observação

Este artigo foi atualizado para usar o novo módulo Az do Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Você ainda pode usar o módulo AzureRM, que continuará a receber as correções de bugs até pelo menos dezembro de 2020.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Para saber mais sobre o novo módulo Az e a compatibilidade com o AzureRM, confira Apresentação do novo módulo Az do Azure PowerShell.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Para obter instruções de instalação do módulo Az, confira Instalar o Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

Como parte da arquitetura de alta disponibilidade, cada banco de dados na camada de serviço Premium e comercialmente crítico é automaticamente provisionado com uma réplica primária e várias réplicas secundárias.As part of the High Availability architecture, each database in the Premium and Business Critical service tier is automatically provisioned with a primary replica and several secondary replicas. As réplicas secundárias são provisionadas com o mesmo tamanho de computação que a réplica primária.The secondary replicas are provisioned with the same compute size as the primary replica. O recurso de expansão de leitura permite balancear a carga de cargas de trabalho somente leitura do banco de dados SQL usando a capacidade de uma das réplicas somente leitura em vez de compartilhar a réplica de leitura-gravação.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. Dessa forma, a carga de trabalho somente leitura serão isoladas da carga de trabalho principal de leitura/gravação e não afetarão o desempenho.This way the read-only workload will be isolated from the main read-write workload and will not affect its performance. O recurso destina-se aos aplicativos que incluem cargas de trabalho somente leitura logicamente separadas, como análise.The feature is intended for the applications that include logically separated read-only workloads, such as analytics. Nas camadas de serviço Premium e Comercialmente Crítico, os aplicativos podem obter benefícios de desempenho usando essa capacidade adicional sem custo adicional.In the Premium and Business Critical service tiers, applications could gain performance benefits using this additional capacity at no extra cost.

O recurso de expansão de leitura também está disponível na camada de serviço de hiperescala quando pelo menos uma réplica secundária é criada.The Read Scale-Out feature is also available in the Hyperscale service tier when at least one secondary replica is created. Várias réplicas secundárias podem ser usadas se as cargas de trabalho somente leitura exigirem mais recursos do que o disponível em uma réplica secundária.Multiple secondary replicas can be used if read-only workloads require more resources than available on one secondary replica. A arquitetura de alta disponibilidade das camadas de serviço Basic, Standard e Uso Geral não inclui nenhuma réplica.The High Availability architecture of Basic, Standard, and General Purpose service tiers does not include any replicas. O recurso de expansão de leitura não está disponível nessas camadas de serviço.The Read Scale-Out feature is not available in these service tiers.

O diagrama a seguir ilustra isso usando um banco de dados Comercialmente Crítico.The following diagram illustrates it using a Business Critical database.

Réplicas somente leitura

O recurso de expansão de leitura é habilitado por padrão nos novos bancos de dados Premium, Comercialmente Crítico e hiperescala.The Read Scale-Out feature is enabled by default on new Premium, Business Critical, and Hyperscale databases. Para o hiperescala, uma réplica secundária é criada por padrão para novos bancos de dados.For Hyperscale, one secondary replica is created by default for new databases. Se a cadeia de conexão SQL estiver configurada com ApplicationIntent=ReadOnly, o aplicativo será redirecionado pelo gateway para uma réplica somente leitura desse banco de dados.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. Para obter informações sobre como usar a propriedade ApplicationIntent, consulte especificando a intenção do aplicativo.For information on how to use the ApplicationIntent property, see Specifying Application Intent.

Se você quiser garantir que o aplicativo se conecte à réplica primária independentemente da configuração de ApplicationIntent na cadeia de conexão SQL, você deve desabilitar explicitamente a expansão de leitura ao criar o banco de dados ou ao alterar sua configuração.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. Por exemplo, se você atualizar seu banco de dados da camada Standard ou Uso Geral para a camada Premium, Comercialmente Crítico ou hiperscale e quiser ter certeza de que todas as suas conexões continuam a ir para a réplica primária, desabilite a expansão de leitura. Para obter detalhes sobre como desabilitá-lo, consulte habilitar e desabilitar a expansão de leitura.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.

Observação

Repositório de Dados de Consultas, os eventos estendidos, o SQL Profiler e os recursos de auditoria não têm suporte nas réplicas somente leitura.Query Data Store, Extended Events, SQL Profiler and Audit features are not supported on the read-only replicas.

Consistência de dadosData consistency

Um dos benefícios das réplicas é que as réplicas estão sempre no estado transacionalmente consistente, mas em diferentes momentos, pode haver uma pequena latência entre diferentes réplicas.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. A Expansão de leitura oferece suporte a consistência em nível de sessão.Read Scale-Out supports session-level consistency. Isso significa que, se a sessão somente leitura se reconectar após um erro de conexão causado pela indisponibilidade de réplica, ela poderá ser redirecionada para uma réplica que não seja 100% atualizada com a réplica de leitura/gravação.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. Da mesma forma, se um aplicativo gravar dados usando uma sessão de leitura/gravação e lê-lo imediatamente usando uma sessão somente leitura, é possível que as atualizações mais recentes não fiquem visíveis imediatamente na réplica.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. A latência é causada por uma operação de refazer do log de transações assíncronas.The latency is caused by an asynchronous transaction log redo operation.

Observação

As latências de replicação na região são baixas e essa situação é rara.Replication latencies within the region are low and this situation is rare.

Conectar-se a uma réplica somente leituraConnect to a read-only replica

Quando você habilita a expansão de leitura para um banco de dados, a opção ApplicationIntent na cadeia de conexão fornecida pelo cliente determina se a conexão é roteada para a réplica de gravação ou para uma réplica somente leitura.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. Especificamente, se o valor ApplicationIntent é ReadWrite (o valor padrão), a conexão será direcionada para a réplica de leitura-gravação do banco de dados.Specifically, if the ApplicationIntent value is ReadWrite (the default value), the connection will be directed to the database’s read-write replica. Isso é idêntico ao comportamento existente.This is identical to existing behavior. Se o valor de ApplicationIntent é ReadOnly, a conexão é roteada para uma réplica somente leitura.If the ApplicationIntent value is ReadOnly, the connection is routed to a read-only replica.

Por exemplo, a seguinte cadeia de conexão conecta o cliente a uma réplica somente leitura (substituindo os itens nos chevrons pelos valores corretos para o seu ambiente e descartando os chevrons):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;

Qualquer uma das seguintes cadeias de conexão conecta o cliente a uma réplica de leitura-gravação (substituindo os itens nos chevrons pelos valores corretos para o seu ambiente e descartando os chevrons):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;

Verifique se uma conexão está pronta para réplica somente leituraVerify that a connection is to a read-only replica

Você pode verificar se você está conectado a uma réplica somente leitura ao executar a consulta a seguir.You can verify whether you are connected to a read-only replica by running the following query. Ela retornará READ_ONLY quando conectado a uma réplica somente leitura.It will return READ_ONLY when connected to a read-only replica.

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability')

Observação

Em um determinado momento qualquer apenas uma das réplicas de AlwaysON fica acessível por sessões somente leitura.At any given time only one of the AlwaysON replicas is accessible by the ReadOnly sessions.

Monitorando e Solucionando problemas de réplica somente leituraMonitoring and troubleshooting read-only replica

Quando conectado a uma réplica somente leitura, você pode acessar as métricas de desempenho usando o 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. Para acessar as estatísticas do plano de consulta, use as DMVs sys.dm_exec_query_stats, sys.dm_exec_query_plan e sys.dm_exec_sql_text.To access query plan statistics, use the sys.dm_exec_query_stats, sys.dm_exec_query_plan and sys.dm_exec_sql_text DMVs.

Observação

O sys.resource_stats DMV no banco de dados mestre lógico retorna o uso da CPU e os dados de armazenamento da réplica primária.The DMV sys.resource_stats in the logical master database returns CPU usage and storage data of the primary replica.

Ativar e desativar o Escalonamento de LeituraEnable and disable Read Scale-Out

A expansão de leitura é habilitada por padrão nas camadas de serviço Premium, Comercialmente Crítico e hiperescala.Read Scale-Out is enabled by default on Premium, Business Critical and Hyperscale service tiers. A expansão de leitura não pode ser habilitada nas camadas de serviço Basic, Standard ou Uso Geral.Read Scale-Out cannot be enabled in Basic, Standard, or General Purpose service tiers. A expansão de leitura é desabilitada automaticamente em bancos de dados de hiperescala configurados com 0 réplicas.Read Scale-Out is automatically disabled on Hyperscale databases configured with 0 replicas.

Você pode desabilitar e reabilitar a expansão de leitura em bancos de dados individuais e bancos de dados de pool elástico na camada de serviço Premium ou Comercialmente Crítico usando os métodos a seguir.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.

Observação

A capacidade de desabilitar a expansão de leitura é fornecida para compatibilidade com versões anteriores.The ability to disable Read Scale-Out is provided for backward compatibility.

Portal do AzureAzure portal

Você pode gerenciar a configuração de expansão de leitura na folha Configurar banco de dados.You can manage the Read Scale-out setting on the Configure database blade.

PowerShellPowerShell

Gerenciar a Expansão de leitura no Microsoft Azure PowerShell requer a versão de dezembro de 2016 do Microsoft Azure PowerShell ou mais recente.Managing Read Scale-Out in Azure PowerShell requires the December 2016 Azure PowerShell release or newer. Para a versão mais recente do PowerShell, consulte Azure PowerShell.For the newest PowerShell release, see Azure PowerShell.

Você pode desabilitar ou reabilitar a escala de leitura em Azure PowerShell invocando o cmdlet set-AzSqlDatabase e passando o valor desejado – Enabled ou Disabled--para o parâmetro -ReadScale.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.

Para desabilitar a expansão de leitura em um banco de dados existente (substituindo os itens pelos colchetes angulares pelos valores corretos para seu ambiente e descartando os colchetes):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

Para desabilitar a expansão de leitura em um novo banco de dados (substituindo os itens nos colchetes angulares pelos valores corretos para seu ambiente e descartando os colchetes):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

Para reabilitar a escala de leitura em um banco de dados existente (substituindo os itens nos colchetes angulares pelos valores corretos para seu ambiente e descartando os colchetes):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

Para criar um banco de dados com expansão de leitura desabilitada ou para alterar a configuração de um banco de dados existente, use o método a seguir com a propriedade readScale definida como Enabled ou Disabled como na solicitação de exemplo abaixo.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"
   }
}

Para obter mais informações, consulte Bancos de dados - Criar ou Atualizar.For more information, see Databases - Create or Update.

Usando TempDB em réplica somente leituraUsing TempDB on read-only replica

O banco de dados TempDB não é replicado para as réplicas somente leitura.The TempDB database is not replicated to the read-only replicas. Cada réplica tem sua própria versão do banco de dados TempDB que é criada quando a réplica é criada.Each replica has its own version of TempDB database that is created when the replica is created. Ele garante que o TempDB seja atualizável e possa ser modificado durante a execução da consulta.It ensures that TempDB is updateable and can be modified during your query execution. Se sua carga de trabalho somente leitura depender do uso de objetos TempDB, você deverá criar esses objetos como parte do script de consulta.If your read-only workload depends on using TempDB objects, you should create these objects as part of your query script.

Usar escala de leitura com bancos de dados replicados geograficamenteUsing Read Scale-Out with geo-replicated databases

Se você estiver usando a expansão de leitura para balancear a carga de cargas de trabalho somente leitura em um banco de dados que é replicado geograficamente (por exemplo, como um membro de um grupo de failover), verifique se a expansão de leitura está habilitada nos bancos de dados primário e secundário replicado geograficamente.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. Essa configuração garantirá que a mesma experiência de balanceamento de carga continue quando o aplicativo se conectar ao novo primário após o failover.This configuration will ensure that the same load-balancing experience continues when your application connects to the new primary after failover. Se estiver se conectando ao banco de dados secundário geograficamente replicado com escala de leitura habilitada, suas sessões com ApplicationIntent=ReadOnly serão roteadas para uma das réplicas da mesma forma que roteamos conexões no banco de dados primário.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. As sessões sem ApplicationIntent=ReadOnly serão roteadas para a réplica primária do secundário replicado geograficamente, que também é somente leitura.The sessions without ApplicationIntent=ReadOnly will be routed to the primary replica of the geo-replicated secondary, which is also read-only. Como o banco de dados secundário replicado geograficamente tem um ponto de extremidade diferente do banco de dados primário, historicamente para acessar o secundário, não era necessário definir 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. Para garantir a compatibilidade com versões anteriores, o sys.geo_replication_links DMV mostra secondary_allow_connections=2 (qualquer conexão de cliente é permitida).To ensure backward compatibility, sys.geo_replication_links DMV shows secondary_allow_connections=2 (any client connection is allowed).

Observação

Não há suporte para Round Robin ou qualquer outro roteamento com balanceamento de carga entre as réplicas locais do banco de dados secundário.Round-robin or any other load-balanced routing between the local replicas of the secondary database is not supported.

Próximas etapasNext steps