Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
O aspeto de desempenho dos Grupos de Disponibilidade Always On é crucial para manter o contrato de nível de serviço (SLA) para seus bancos de dados de missão crítica. Compreender como os grupos de disponibilidade enviam logs para réplicas secundárias pode ajudá-lo a estimar o RTO (Recovery Time Objective, objetivo de tempo de recuperação) e o RPO (Recovery Point Objective, objetivo de ponto de recuperação) da implementação de disponibilidade e identificar estrangulamentos em grupos de disponibilidade ou réplicas de baixo desempenho. Este artigo descreve o processo de sincronização, mostra como calcular algumas das principais métricas e fornece os links para alguns dos cenários comuns de solução de problemas de desempenho.
Processo de sincronização de dados
Para estimar o tempo até a sincronização completa e identificar o gargalo, você precisa entender o processo de sincronização. O gargalo de desempenho pode estar em qualquer lugar do processo, e localizar o gargalo pode ajudá-lo a se aprofundar nos problemas subjacentes. A figura e a tabela a seguir ilustram o processo de sincronização de dados:
| Sequência | Descrição do passo | Observações | Métricas úteis |
|---|---|---|---|
| 1 | Geração de logs | Os dados de log são gravados no disco. Este registo deve ser replicado para as réplicas secundárias. Os registros de log entram na fila de envio. | SQL Server:Bytes de log esvaziados do banco de dados > por segundo |
| 2 | Recolha | Os logs de cada banco de dados são capturados e enviados para a fila de parceiros correspondente (um por par de réplica de banco de dados). Esse processo de captura é executado continuamente, desde que a réplica de disponibilidade esteja conectada e a movimentação de dados não seja suspensa por qualquer motivo, e o par de réplica de banco de dados seja mostrado como Sincronizando ou Sincronizado. Se o processo de captura não for capaz de verificar e enfileirar as mensagens com rapidez suficiente, a fila de envio de log se acumula. | log_send_queue_size (KB) e log_bytes_send_rate (KB/seg) na réplica primária. |
| 3 | Enviar | As mensagens em cada fila de réplica de banco de dados são retiradas da fila e enviadas através do fio para a respetiva réplica secundária. | SQL Server:Réplica de Disponibilidade > Bytes enviados para transporte/s |
| 4 | Receber e armazenar em cache | Cada réplica secundária recebe e armazena em cache a mensagem. | Contador de desempenho SQL Server: Réplica de disponibilidade > Bytes de log recebidos/seg |
| 5 | Endurecer | O log é esvaziado na réplica secundária para consolidação. Após a liberação do log, uma confirmação é enviada de volta para a réplica primária. Depois que o log é protegido, a perda de dados é evitada. |
Contador de desempenho SQL Server:Base de dados > Bytes de log despejados/seg Tipo de espera HADR_LOGCAPTURE_SYNC |
| 6 | Refazer | Refaça as páginas liberadas na réplica secundária. As páginas são mantidas na fila de refazer enquanto aguardam para serem refeitas. |
SQL Server:Réplica de banco de dados > Bytes refeitos/segundo redo_queue_size (KB) e redo_rate. Aguarde o tipo REDO_SYNC |
Portões de controle de fluxo
Os grupos de disponibilidade são projetados com portas de controle de fluxo na réplica primária para evitar o consumo excessivo de recursos, como recursos de rede e memória, em todas as réplicas de disponibilidade. Essas portas de controle de fluxo não afetam o estado de integridade da sincronização das réplicas de disponibilidade, mas podem afetar o desempenho geral dos bancos de dados de disponibilidade, incluindo o RPO.
Depois que os logs são capturados na réplica primária, eles estão sujeitos a dois níveis de controles de fluxo. Quando o limite de mensagens de qualquer porta é atingido, as mensagens de log não são mais enviadas para uma réplica específica ou para um banco de dados específico. As mensagens podem ser enviadas assim que as mensagens de confirmação são recebidas para que as mensagens enviadas tragam o número de mensagens enviadas abaixo do limite.
Além das portas de controle de fluxo, há outro fator que pode impedir que as mensagens de log sejam enviadas. A sincronização de réplicas garante que as mensagens sejam enviadas e aplicadas na ordem dos números de sequência do log (LSN). Antes de uma mensagem de log ser enviada, o seu LSN também é verificado em relação ao número LSN reconhecido mais baixo para se certificar de que é menor que um dos limiares (dependendo do tipo de mensagem). Se a diferença entre os dois números LSN for maior do que o limite, as mensagens não serão enviadas. Assim que o intervalo estiver novamente abaixo do limite, as mensagens são enviadas.
O SQL Server 2022 (16.x) aumenta os limites para o número de mensagens que cada porta permite. A partir das seguintes versões, use o traço flag 12310 no arranque para aumentar o limite: SQL Server 2019 (15.x) CU9, SQL Server 2017 (14.x) CU18 e SQL Server 2016 (13.x) SP1 CU16. Este flag de traço não pode ser usado com DBCC TRACEON.
A tabela a seguir compara os limites de mensagens:
Para versões do SQL Server que habilitam o sinalizador de rastreamento 12310, ou seja, SQL Server 2022 (16.x), SQL Server 2019 (15.x) CU9, SQL Server 2017 (14.x) CU18, SQL Server 2016 (13.x) SP1 CU16 e versões posteriores, consulte os seguintes limites:
| Nível | Número de portões | Número de mensagens | Métricas úteis |
|---|---|---|---|
| Transportes | 1 por réplica de disponibilidade | 16384 | Evento expandido database_transport_flow_control_action |
| Base de dados | 1 por base de dados de disponibilidade | 7168 |
DBMIRROR_SEND Evento expandido hadron_database_flow_control_action |
Dois contadores de desempenho úteis, SQL Server:Réplica de Disponibilidade > Controlo de Fluxo/seg e SQL Server:Réplica de Disponibilidade > Tempo do Controlo de Fluxo (ms/seg), mostram-lhe, no último segundo, quantas vezes o controlo de fluxo foi ativado e quanto tempo foi gasto à espera pelo controlo de fluxo. Maior tempo de espera no controle de fluxo se traduz em RPO mais alto. Para obter mais informações sobre os tipos de problemas que podem causar um tempo de espera elevado no controlo de fluxo, consulte Solução de problemas - perda potencial de dados com réplicas de grupos de disponibilidade com confirmação assíncrona.
Estimar o tempo de failover (RTO)
O RTO no seu SLA depende do tempo de failover da implementação Always On em qualquer momento, podendo ser expresso na seguinte fórmula:
Importante
Se um grupo de disponibilidade contiver mais de um banco de dados de disponibilidade, o banco de dados de disponibilidade com o Tfailover mais alto se tornará o valor limite para conformidade com RTO.
O tempo de deteção de falha, Tdetection, é o tempo que o sistema leva para detetar a falha. Esse tempo depende das configurações no nível do cluster e não das réplicas de disponibilidade individuais. Dependendo da condição de comutação por falha automática configurada, uma comutação por falha pode ser acionada como uma resposta instantânea a um erro interno crítico do SQL Server, como spinlocks (bloqueios giratórios) órfãos. Nesse caso, a deteção pode ser tão rápida quanto o envio do relatório de erros do sp_server_diagnostics para o Cluster de Failover do Windows Server (WSFC). O intervalo padrão é 1/3 do tempo limite da verificação de integridade. Um failover também pode ser acionado devido a um tempo limite, como quando o tempo limite da verificação de integridade do cluster expira (30 segundos por padrão) ou quando o lease entre a DLL do recurso e a instância do SQL Server expira (20 segundos por padrão). Nesse caso, o tempo de deteção é tão longo quanto o intervalo de tempo limite. Para obter mais informações, consulte Política de failover flexível para failover automático de um grupo de disponibilidade (SQL Server).
A única coisa que a réplica secundária precisa fazer para estar pronta para um failover é que a reaplicação alcance o final do log. O tempo de refazer, Tredo, é calculado usando a seguinte fórmula:
onde redo_queue representa o valor em redo_queue_size e redo_rate representa o valor em redo_rate.
O tempo de sobrecarga de failover, Toverhead, inclui o tempo necessário para realizar o failover do cluster WSFC e tornar os bancos de dados acessíveis. Este tempo é geralmente curto e constante.
Estimar a perda potencial de dados (RPO)
O RPO em seu SLA depende da possível perda de dados de sua implementação Always On a qualquer momento. Esta possível perda de dados pode ser expressa na seguinte fórmula:
onde log_send_queue é o valor de log_send_queue_size e taxa de geração de log é o valor de SQL Server:Database > Log Bytes Descarregados/s.
Advertência
Se um grupo de disponibilidade contiver mais de um banco de dados de disponibilidade, o banco de dados de disponibilidade com o Tdata_loss mais alto se tornará o valor limite para conformidade com RPO.
A fila de envio de log representa todos os dados que podem ser perdidos por uma falha catastrófica. À primeira vista, é curioso que a taxa de geração de log seja usada em vez da taxa de envio de log (veja log_send_rate). No entanto, lembre-se de que usar a taxa de envio de log só dá tempo para sincronizar, enquanto o RPO mede a perda de dados com base na rapidez com que são gerados, não na velocidade com que são sincronizados.
Uma maneira mais simples de estimar Tdata_loss é usar last_commit_time. O Detran na réplica principal informa esse valor para todas as réplicas. Você pode calcular a diferença entre o valor da réplica primária e o valor da réplica secundária para estimar a rapidez com que o log na réplica secundária está alcançando a réplica primária. Como dito anteriormente, esse cálculo não informa a perda potencial de dados com base na rapidez com que o log é gerado, mas deve ser uma aproximação próxima.
Estimar RTO e RPO com o painel de instrumentos do SSMS
Em Grupos de Disponibilidade Always On, o RTO e o RPO são calculados e exibidos para os bancos de dados hospedados nas réplicas secundárias. No painel do SQL Server Management Studio (SSMS), na réplica primária, o RTO e o RPO são organizados de acordo com a réplica secundária.
Para exibir o RTO e o RPO no painel, execute as seguintes etapas:
No SQL Server Management Studio, expanda o nó de Alta Disponibilidade Always On, clique com o botão direito do mouse no nome do seu grupo de disponibilidade e selecione Mostrar Painel.
Selecione Adicionar/Remover Colunas na guia Agrupar por. Selecione ambas as opções Tempo de Recuperação Estimado (segundos) [RTO] e Perda de Dados Estimada (tempo) [RPO].
Cálculo do RTO do banco de dados secundário
O cálculo do tempo de recuperação determina quanto tempo é necessário para recuperar o banco de dados secundário após a ocorrência de um failover. O tempo de failover é geralmente curto e constante. O tempo de deteção depende das configurações no nível do cluster e não das réplicas de disponibilidade individuais.
Para uma base de dados secundária (DB_sec), o cálculo e a apresentação do seu RTO baseiam-se no seu redo_queue_size e redo_rate:
Exceto casos extremos, a fórmula para calcular o RTO de um banco de dados secundário é:
Cálculo do RPO do banco de dados secundário
Para um banco de dados secundário (DB_sec), o cálculo e a exibição do seu RPO são baseados nos seus is_failover_ready, last_commit_time e nos valores DB_pri do banco de dados primário correlacionado (last_commit_time). Quando o valor de DB_sec.is_failover_ready é 1, os dados entre o primário e o secundário são sincronizados, e nenhuma perda de dados ocorre após o failover. No entanto, se esse valor for 0, há uma lacuna entre o last_commit_time no banco de dados primário e o last_commit_time no banco de dados secundário.
Para a base de dados primária, o last_commit_time é o tempo em que a transação mais recente foi confirmada. Para o banco de dados secundário, o last_commit_time é o tempo de confirmação mais recente para a transação do banco de dados primário, que também foi gravado com sucesso no banco de dados secundário. Esse número é o mesmo para o banco de dados primário e secundário. No entanto, uma lacuna entre esses dois valores é a duração na qual as transações pendentes não foram reforçadas no banco de dados secundário e podem ser perdidas no caso de um failover.
Métricas de desempenho usadas em fórmulas RTO/RPO
redo_queue_size(KB): O tamanho da fila de refazer, usado no RTO, é o tamanho dos logs de transações entre olast_received_lsne olast_redone_lsn. Olast_received_lsnvalor é o ID do bloco de log que identifica o ponto até o qual todos os blocos de log foram recebidos pela réplica secundária que hospeda esse banco de dados secundário. O valor delast_redone_lsné o número de sequência de log do último registro de log que foi refeito no banco de dados secundário. Com base nesses dois valores, podemos encontrar IDs do bloco de log inicial (last_received_lsn) e do bloco de log final (last_redone_lsn). O espaço entre esses dois blocos de log pode representar quantos blocos de log de transações ainda não foram refeitos. Isto é medido em Kilobytes(KB).redo_rate(KB/seg): Usado no cálculo de RTO, este é um valor cumulativo que mostra quanto do log de transações (KB) foi refeito ou reproduzido no banco de dados secundário por segundo.last_commit_time(datetime): Usado no RPO, esse valor tem um significado diferente entre o banco de dados primário e secundário. Para o banco de dados primário,last_commit_timeé o momento em que a transação mais recente foi confirmada. Para o banco de dados secundário, a confirmação mais recentelast_commit_timeé para a transação no banco de dados primário que também foi protegida com êxito no banco de dados secundário. Como esse valor no secundário deve ser sincronizado com o mesmo valor no primário, qualquer lacuna entre esses dois valores é a estimativa de perda de dados (RPO).
Estimar RTO e RPO usando DMVs
É possível consultar DMVs sys.dm_hadr_database_replica_states e sys.dm_hadr_database_replica_cluster_states para estimar o RPO e o RTO de uma base de dados. As consultas abaixo criam procedimentos armazenados que realizam ambas as coisas.
Observação
Certifique-se de criar e executar o procedimento armazenado para estimar o RTO primeiro, pois os valores que ele produz são necessários para executar o procedimento armazenado para estimar o RPO.
Criar um procedimento armazenado para estimar o RTO
Na réplica secundária de destino, crie o procedimento armazenado
proc_calculate_RTO. Se este procedimento armazenado já existir, elimine-o primeiro e depois recrie-o.IF object_id(N'proc_calculate_RTO', 'p') IS NOT NULL DROP PROCEDURE proc_calculate_RTO; GO RAISERROR ('creating procedure proc_calculate_RTO', 0, 1) WITH NOWAIT; GO -- name: proc_calculate_RTO -- -- description: Calculate RTO of a secondary database. -- -- parameters: @secondary_database_name nvarchar(max): name of the secondary database. -- -- security: this is a public interface object. -- CREATE PROCEDURE proc_calculate_RTO @secondary_database_name NVARCHAR (MAX) AS BEGIN DECLARE @db AS sysname; DECLARE @is_primary_replica AS BIT; DECLARE @is_failover_ready AS BIT; DECLARE @redo_queue_size AS BIGINT; DECLARE @redo_rate AS BIGINT; DECLARE @replica_id AS UNIQUEIDENTIFIER; DECLARE @group_database_id AS UNIQUEIDENTIFIER; DECLARE @group_id AS UNIQUEIDENTIFIER; DECLARE @RTO AS FLOAT; SELECT @is_primary_replica = dbr.is_primary_replica, @is_failover_ready = dbcs.is_failover_ready, @redo_queue_size = dbr.redo_queue_size, @redo_rate = dbr.redo_rate, @replica_id = dbr.replica_id, @group_database_id = dbr.group_database_id, @group_id = dbr.group_id FROM sys.dm_hadr_database_replica_states AS dbr INNER JOIN sys.dm_hadr_database_replica_cluster_states AS dbcs ON dbr.replica_id = dbcs.replica_id AND dbr.group_database_id = dbcs.group_database_id WHERE dbcs.database_name = @secondary_database_name; IF @is_primary_replica IS NULL OR @is_failover_ready IS NULL OR @redo_queue_size IS NULL OR @replica_id IS NULL OR @group_database_id IS NULL OR @group_id IS NULL BEGIN PRINT 'RTO of Database ' + @secondary_database_name + ' is not available'; RETURN; END ELSE IF @is_primary_replica = 1 BEGIN PRINT 'You are visiting wrong replica'; RETURN; END IF @redo_queue_size = 0 SET @RTO = 0; ELSE IF @redo_rate IS NULL OR @redo_rate = 0 BEGIN PRINT 'RTO of Database ' + @secondary_database_name + ' is not available'; RETURN; END ELSE SET @RTO = CAST (@redo_queue_size AS FLOAT) / @redo_rate; PRINT 'RTO of Database ' + @secondary_database_name + ' is ' + CONVERT (VARCHAR, ceiling(@RTO)); PRINT 'group_id of Database ' + @secondary_database_name + ' is ' + CONVERT (NVARCHAR (50), @group_id); PRINT 'replica_id of Database ' + @secondary_database_name + ' is ' + CONVERT (NVARCHAR (50), @replica_id); PRINT 'group_database_id of Database ' + @secondary_database_name + ' is ' + CONVERT (NVARCHAR (50), @group_database_id); ENDExecute
proc_calculate_RTOcom o nome do banco de dados secundário de destino:EXECUTE proc_calculate_RTO @secondary_database_name = N'DB_sec';A saída exibe o valor RTO do banco de dados de réplica secundária de destino. Guarde os group_id, replica_ide group_database_id para usar com o procedimento de armazenamento da estimativa de RPO.
Saída da amostra:
RTO of Database DB_sec' is 0 group_id of Database DB4 is F176DD65-C3EE-4240-BA23-EA615F965C9B replica_id of Database DB4 is 405554F6-3FDC-4593-A650-2067F5FABFFD group_database_id of Database DB4 is 39F7942F-7B5E-42C5-977D-02E7FFA6C392
Criar um procedimento armazenado para estimar o RPO
Na réplica primária, crie o procedimento armazenado
proc_calculate_RPO. Se já existir, largue-o primeiro e depois recrie-o.IF object_id(N'proc_calculate_RPO', 'p') IS NOT NULL DROP PROCEDURE proc_calculate_RPO; GO RAISERROR ('creating procedure proc_calculate_RPO', 0, 1) WITH NOWAIT; GO -- name: proc_calculate_RPO -- -- description: Calculate RPO of a secondary database. -- -- parameters: @group_id uniqueidentifier: group_id of the secondary database. -- @replica_id uniqueidentifier: replica_id of the secondary database. -- @group_database_id uniqueidentifier: group_database_id of the secondary database. -- -- security: this is a public interface object. -- CREATE PROCEDURE proc_calculate_RPO @group_id UNIQUEIDENTIFIER, @replica_id UNIQUEIDENTIFIER, @group_database_id UNIQUEIDENTIFIER AS BEGIN DECLARE @db_name AS sysname; DECLARE @is_primary_replica AS BIT; DECLARE @is_failover_ready AS BIT; DECLARE @is_local AS BIT; DECLARE @last_commit_time_sec AS DATETIME; DECLARE @last_commit_time_pri AS DATETIME; DECLARE @RPO AS NVARCHAR (MAX); SELECT @db_name = dbcs.database_name, @is_failover_ready = dbcs.is_failover_ready, @last_commit_time_sec = dbr.last_commit_time FROM sys.dm_hadr_database_replica_states AS dbr INNER JOIN sys.dm_hadr_database_replica_cluster_states AS dbcs ON dbr.replica_id = dbcs.replica_id AND dbr.group_database_id = dbcs.group_database_id WHERE dbr.group_id = @group_id AND dbr.replica_id = @replica_id AND dbr.group_database_id = @group_database_id; SELECT @last_commit_time_pri = dbr.last_commit_time, @is_local = dbr.is_local FROM sys.dm_hadr_database_replica_states AS dbr INNER JOIN sys.dm_hadr_database_replica_cluster_states AS dbcs ON dbr.replica_id = dbcs.replica_id AND dbr.group_database_id = dbcs.group_database_id WHERE dbr.group_id = @group_id AND dbr.is_primary_replica = 1 AND dbr.group_database_id = @group_database_id; IF @is_local IS NULL OR @is_failover_ready IS NULL BEGIN PRINT 'RPO of database ' + @db_name + ' is not available'; RETURN; END IF @is_local = 0 BEGIN PRINT 'You are visiting wrong replica'; RETURN; END IF @is_failover_ready = 1 SET @RPO = '00:00:00'; ELSE IF @last_commit_time_sec IS NULL OR @last_commit_time_pri IS NULL BEGIN PRINT 'RPO of database ' + @db_name + ' is not available'; RETURN; END ELSE BEGIN IF DATEDIFF(ss, @last_commit_time_sec, @last_commit_time_pri) < 0 BEGIN PRINT 'RPO of database ' + @db_name + ' is not available'; RETURN; END ELSE SET @RPO = CONVERT (VARCHAR, DATEADD(ms, datediff(ss, @last_commit_time_sec, @last_commit_time_pri) * 1000, 0), 114); END PRINT 'RPO of database ' + @db_name + ' is ' + @RPO; END -- secondary database's last_commit_time -- correlated primary database's last_commit_timeExecutar
proc_calculate_RPOcom o group_id, replica_id e group_database_id do banco de dados secundário de destino.EXECUTE proc_calculate_RPO @group_id = 'F176DD65-C3EE-4240-BA23-EA615F965C9B', @replica_id = '405554F6-3FDC-4593-A650-2067F5FABFFD', @group_database_id = '39F7942F-7B5E-42C5-977D-02E7FFA6C392';A saída exibe o valor RPO do banco de dados de réplica secundária de destino.
Monitor para RTO e RPO
Esta seção demonstra como monitorar seus grupos de disponibilidade para métricas de RTO e RPO. Esta demonstração é semelhante ao tutorial sobre a Interface Gráfica de Utilizador (GUI) apresentado em O modelo de saúde Sempre Ativo, parte 2: Ampliando o modelo de saúde.
Os elementos da estimativa do tempo de recuperação (RTO) e da estimativa da perda potencial de dados (RPO) são disponibilizados convenientemente como métricas de desempenho na faceta de gestão de políticas Estado da réplica do banco de dados. Para obter mais informações, consulte Exibir facetas do Gerenciamento Baseado em Políticas em um Objeto do SQL Server. Você pode monitorar essas duas métricas em um cronograma e ser alertado quando as métricas excederem seu RTO e RPO, respectivamente.
Os scripts demonstrados criam duas diretivas de sistema que são executadas em suas respetivas agendas, com as seguintes características:
Uma política de RTO que falha quando o tempo de failover estimado excede 10 minutos, sendo avaliado a cada 5 minutos.
Uma política de RPO que falha quando a perda de dados estimada excede 1 hora, avaliada a cada 30 minutos
As duas políticas têm configuração idêntica em todas as réplicas de disponibilidade
As políticas são avaliadas em todos os servidores, mas apenas nos grupos de disponibilidade para os quais a réplica de disponibilidade local é a réplica primária. Se a réplica de disponibilidade local não for a réplica principal, as políticas não serão avaliadas.
As falhas de política são convenientemente exibidas no Painel Always On quando você o visualiza na réplica principal.
Para criar as políticas, siga estas instruções em todas as instâncias do servidor que participam do grupo de disponibilidade:
Inicie o serviço SQL Server Agent se ainda não tiver sido iniciado.
No SQL Server Management Studio, no menu Ferramentas , selecione Opções.
Na guia SQL Server Always On, selecione Habilitar política Always On definida pelo usuário e selecione OK.
Essa configuração permite que você exiba políticas personalizadas configuradas corretamente no Painel Always On.
Crie uma condição de gerenciamento baseada em políticas usando as seguintes especificações:
-
Nome:
RTO - Faceta: Estado da Réplica do Banco de Dados
-
Campo:
Add(@EstimatedRecoveryTime, 60) - Operador: <=
-
Valor:
600
Essa condição falha quando o tempo potencial de transferência de serviço ultrapassa 10 minutos, incluindo um acréscimo de 60 segundos para a deteção de falhas e a transferência de serviço.
-
Nome:
Crie uma segunda condição de gerenciamento, , baseada em políticas,, usando as seguintes especificações:
-
Nome:
RPO - Faceta: Estado da Réplica do Banco de Dados
-
Campo:
@EstimatedDataLoss - Operador: <=
-
Valor:
3600
Esta condição falha quando a perda potencial de dados excede 1 hora.
-
Nome:
Crie uma terceira condição baseada em políticas de gerenciamento usando as seguintes especificações:
-
Nome:
IsPrimaryReplica - Faceta: do Grupo de Disponibilidade
-
Campo:
@LocalReplicaRole - Operador: =
-
Valor:
Primary
Esta condição verifica se a réplica de disponibilidade local para um determinado grupo de disponibilidade é a réplica primária.
-
Nome:
Crie uma política de gerenciamento baseada em políticas usando as seguintes especificações:
Página Geral:
Nome:
CustomSecondaryDatabaseRTOVerificar condição:
RTOContra destinos: cada DatabaseReplicaState em IsPrimaryReplica AvailabilityGroup
Essa configuração garante que a política seja avaliada somente em grupos de disponibilidade para os quais a réplica de disponibilidade local é a réplica primária.
Modo de avaliação: Dentro do cronograma
Horário: CollectorSchedule_Every_5min
Ativado: selecionado
Descrição página:
Categoria: Avisos do banco de dados de disponibilidade
Essa configuração permite que os resultados da avaliação da política sejam exibidos no Painel Always On.
Descrição: A réplica atual tem um RTO que excede 10 minutos, assumindo uma sobrecarga de 1 minuto para descoberta e failover. Você deve investigar problemas de desempenho na respetiva instância do servidor imediatamente.
Texto para exibir: RTO excedido!
Crie uma segunda política de gestão baseada em políticas usando as seguintes especificações:
Página Geral:
-
Nome:
CustomAvailabilityDatabaseRPO -
Verificar condição:
RPO - Contra destinos: cada DatabaseReplicaState em IsPrimaryReplica AvailabilityGroup
- Modo de avaliação: Dentro do cronograma
- Horário: CollectorSchedule_Every_30min
- Ativado: selecionado
-
Nome:
Descrição página:
Categoria: Avisos do banco de dados de disponibilidade
Descrição: O banco de dados de disponibilidade excedeu seu RPO de 1 hora. Você deve investigar problemas de desempenho nas réplicas de disponibilidade imediatamente.
Texto para exibir: RPO excedido!
Quando terminar, serão criados dois novos trabalhos do SQL Server Agent, um para cada um dos agendamentos de avaliação de políticas. Esses trabalhos devem ter nomes que comecem com syspolicy_check_schedule.
Você pode visualizar o histórico do trabalho para inspecionar os resultados da avaliação. As falhas de avaliação também são registradas no log de aplicativos do Windows (no Visualizador de Eventos) com a ID de Evento 34052. Você também pode configurar o SQL Server Agent para enviar alertas sobre as falhas de política. Para obter mais informações, consulte Configurar alertas para notificar administradores de políticas sobre falhas de política.
Cenários de solução de problemas de desempenho
A tabela a seguir lista os cenários comuns de solução de problemas relacionados ao desempenho.
| Cenário | Descrição |
|---|---|
| Resolução de problemas: O grupo de disponibilidade excedeu o RTO | Após um failover automático ou um failover manual planejado sem perda de dados, o tempo de failover excede seu RTO. Ou, quando estima o tempo de failover de uma réplica secundária de confirmação síncrona (como um parceiro de failover automático), descobre que este excede o seu RTO. |
| Solução de problemas: o grupo de disponibilidade excedeu o RPO | Depois de realizar um failover manual forçado, a perda de dados supera o seu RPO. Ou, quando você calcula a perda potencial de dados de uma réplica secundária de confirmação assíncrona, descobre que ela excede seu RPO. |
| Solução de problemas: as alterações na réplica primária não são refletidas na réplica secundária | O aplicativo cliente conclui uma atualização na réplica primária com êxito, mas consultar a réplica secundária mostra que a alteração não é refletida. |
Eventos prolongados úteis
Os eventos estendidos a seguir são úteis ao solucionar problemas de réplicas no estado Sincronizando.
| Nome do evento | Categoria | Canal | Réplica de disponibilidade |
|---|---|---|---|
redo_caught_up |
transações | Depurar | Secundário |
redo_worker_entry |
transações | Depurar | Secundário |
hadr_transport_dump_message |
alwayson |
Depurar | Primário |
hadr_worker_pool_task |
alwayson |
Depurar | Primário |
hadr_dump_primary_progress |
alwayson |
Depurar | Primário |
hadr_dump_log_progress |
alwayson |
Depurar | Primário |
hadr_undo_of_redo_log_scan |
alwayson |
Analítico | Secundário |