Erro 9002: o log de transações do banco de dados está cheio devido à mensagem de erro AVAILABILITY_REPLICA no SQL Server
Este artigo ajuda você a resolver o erro 9002 que ocorre quando o log de transações se torna grande ou fica sem espaço no SQL Server.
Versão original do produto: SQL Server 2017, SQL Server 2016, SQL Server 2014, SQL Server 2012
Número original do KB: 2922898
Sintomas
Considere o cenário a seguir.
- Você tem o Microsoft SQL Server 2012 ou uma versão posterior instalada em um servidor.
- A instância do SQL Server é uma réplica primária no ambiente de Grupos de Disponibilidade AlwaysOn.
- A opção de crescimento automático para arquivos de log de transações é definida no SQL Server.
Nesse cenário, o log de transações pode ficar grande e ficar sem espaço em disco ou exceder a opção MaxSize definida para o log de transações na réplica primária e você receberá uma mensagem de erro semelhante à seguinte:
Erro: 9002, Gravidade: 17, Estado: 9. O log de transações do banco de dados '%.*ls' está cheio devido a 'AVAILABILITY_REPLICA'
Causa
Isso ocorre quando as alterações registradas na réplica primária ainda não foram protegidas na réplica secundária. Para obter mais informações sobre o processo de sincronização de dados no ambiente Always On, consulte Processo de sincronização de dados.
Solução de problemas
Há dois cenários que podem levar ao crescimento de log em um banco de dados de disponibilidade e o 'AVAILABILITY_REPLICA' log_reuse_wait_desc
:
Cenário 1: Latência entregando alterações registradas para o secundário
Quando as transações alteram dados na réplica primária, essas alterações são encapsuladas em blocos de registro de log e esses blocos registrados são entregues e protegidos no arquivo de log do banco de dados na réplica secundária. A réplica primária não pode substituir blocos de log em seu próprio arquivo de log até que esses blocos de log tenham sido entregues e protegidos para o arquivo de log de banco de dados correspondente em todas as réplicas secundárias. Qualquer atraso na entrega ou proteção desses blocos para qualquer réplica no Grupo de Disponibilidade impedirá o truncamento dessas alterações registradas no banco de dados na réplica primária e fará com que o uso do arquivo de log aumente.
Para obter mais informações, consulte Alta latência de rede ou baixa taxa de transferência de rede causa acúmulo de log na réplica primária.
Cenário 2: Latência de refazer
Depois de protegido para o arquivo de log do banco de dados secundário, um thread de restauração dedicado na instância de réplica secundária aplica os registros de log independentes aos arquivos de dados correspondentes. A réplica primária não pode substituir blocos de log em seu próprio arquivo de log até que todos os threads de restauração em todas as réplicas secundárias tenham aplicado os registros de log contidos.
Se a operação de restauração em qualquer réplica secundária não for capaz de acompanhar a velocidade na qual os blocos de log são protegidos nessa réplica secundária, isso levará ao crescimento do log na réplica primária. A réplica primária só pode truncar e reutilizar seu próprio log de transações até o ponto em que todos os threads de restauração da réplica secundária foram aplicados. Se houver mais de um secundário, compare a
truncation_lsn
coluna da exibição de gerenciamento dinâmico entre os vários secundários para identificar qual banco desys.dm_hadr_database_replica_states
dados secundário está atrasando mais o truncamento de log.Você pode usar o Painel Always On e
sys.dm_hadr_database_replica_states
as exibições de gerenciamento dinâmico para ajudar a monitorar a fila de envio de log e a fila de refazer. Alguns campos-chave são:Campo Descrição log_send_queue_size
Quantidade de registros de log que não chegaram à réplica secundária log_send_rate
Taxa na qual os registros de log estão sendo enviados para os bancos de dados secundários. redo_queue_size
A quantidade de registros de log nos arquivos de log da réplica secundária que ainda não foi refeita, em KB (quilobytes). redo_rate
A taxa na qual os registros de log estão sendo refeitos em um determinado banco de dados secundário, em quilobytes (KB)/segundo. last_redone_lsn
O número de sequência de log real do último registro de log que foi desfeito no banco de dados secundário. last_redone_lsn
é sempre menor quelast_hardened_lsn
.last_received_lsn
A 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. Reflete uma ID de bloco de log preenchida com zeros. Não é um número de sequência de log real. Por exemplo, execute a seguinte consulta na réplica primária para relatar a réplica com o mais antigo
truncation_lsn
e é o limite superior que o primário pode recuperar em seu próprio log de transações:SELECT ag.name AS [availability_group_name] , d.name AS [database_name] , ar.replica_server_name AS [replica_instance_name] , drs.truncation_lsn , drs.log_send_queue_size , drs.redo_queue_size FROM sys.availability_groups ag INNER JOIN sys.availability_replicas ar ON ar.group_id = ag.group_id INNER JOIN sys.dm_hadr_database_replica_states drs ON drs.replica_id = ar.replica_id INNER JOIN sys.databases d ON d.database_id = drs.database_id WHERE drs.is_local=0 ORDER BY ag.name ASC, d.name ASC, drs.truncation_lsn ASC, ar.replica_server_name ASC
As medidas corretivas podem incluir, mas não estão limitadas ao seguinte:
- Certifique-se de que não haja nenhum gargalo de recursos ou desempenho no secundário.
- Verifique se o thread Redo não está bloqueado no secundário. Use o
lock_redo_blocked
evento estendido para identificar quando isso ocorre e em quais objetos o thread de restauração está bloqueado.
Solução alternativa
Depois de identificar o banco de dados secundário que faz isso ocorrer, tente um ou mais dos seguintes métodos para contornar esse problema temporariamente:
Retire o banco de dados do grupo de disponibilidade para o secundário ofensivo.
Observação
Esse método resultará na perda do cenário de Alta Disponibilidade/Recuperação de Desastre para o secundário. Talvez seja necessário configurar o Grupo de Disponibilidade novamente no futuro.
Se o thread de restauração for bloqueado com frequência, desabilite o
Readable Secondary
recurso alterando oALLOW_CONNECTIONS
SECONDARY_ROLE
parâmetro da réplica para NO.Observação
Isso impedirá que os usuários leiam os dados na réplica secundária, que é a causa raiz do bloqueio. Depois que a fila de restauração cair para um tamanho aceitável, considere habilitar o recurso novamente.
Ative a configuração de crescimento automático se estiver desabilitada e houver espaço em disco disponível.
Aumente o valor MaxSize para o arquivo de log de transações se ele tiver sido atingido e houver espaço em disco disponível.
Adicione um arquivo de log de transações adicional se o atual tiver atingido o máximo de 2 TB do sistema ou se houver espaço adicional disponível em outro volume disponível.
Mais informações
Para obter mais informações sobre por que um log de transações cresce inesperadamente ou fica cheio no SQL Server, consulte Solucionar problemas de um log de transações completo (Erro 9002 do SQL Server).
Para obter mais informações sobre o problema de bloqueio da operação Refazer, consulte AlwaysON – HADRON Learning Series: lock_redo_blocked/redo worker bloqueado na réplica secundária.
Para obter mais informações sobre colunas de log_reuse_wait baseadas em AVAILABILITY_REPLICA, consulte Fatores que podem atrasar o truncamento de log.
Para obter mais informações sobre o
sys.dm_hadr_database_replica_states
modo de exibição, consulte sys.dm_hadr_database_replica_states (Transact-SQL).Para obter mais informações sobre como monitorar e solucionar problemas de alterações registradas que não estão chegando e não estão sendo aplicadas em tempo hábil, consulte Monitorar o desempenho de grupos de disponibilidade AlwaysOn.
Aplica-se a
- SQL Server 2012 Enterprise
- SQL Server 2014 Enterprise
- SQL Server 2014 Business Intelligence
- SQL Server 2014 Standard
- SQL Server 2016 Enterprise
- SQL Server 2016 Standard
- SQL Server 2017 Enterprise
- SQL Server 2017 Standard Windows