Partilhar via


Configurar a resemeadura automática para bases de dados espelhadas do Fabric no SQL Server

Este artigo aborda a reentrada automática para replicação de um banco de dados a partir de uma instância do SQL Server.

Há certas situações em que atrasos no espelhamento no Fabric podem levar ao aumento do uso do arquivo de log de transações. Isso ocorre porque o log de transações não pode ser truncado até que as alterações confirmadas tenham sido replicadas para o banco de dados espelhado. Quando o tamanho do log de transações atinge seu limite máximo definido, as gravações no banco de dados falham. Para proteger bases de dados operacionais contra falhas de gravação para transações OLTP críticas, pode configurar um mecanismo de autoreseed que permita que o log de transações seja truncado e reinicie o espelhamento da base de dados para Fabric.

Uma re-semeadura interrompe o fluxo de transações para o Microsoft Fabric a partir do banco de dados espelhado e reinicializa o espelhamento no estado atual. Isso envolve gerar um novo instantâneo inicial das tabelas configuradas para espelhamento e replicá-lo para o Microsoft Fabric. Após o snapshot, as alterações incrementais são replicadas.

Durante a repropagação, o item de banco de dados espelhado no Microsoft Fabric está disponível, mas não receberá alterações incrementais até que a repropagação seja concluída. A coluna reseed_state em sys.sp_help_change_feed_settings indica o estado de restabelecimento.

A funcionalidade de autoreseed está desativada por defeito no SQL Server 2025, para saber como ativar, consulte Ativar autoreseed. O recurso autoreed está habilitado e não pode ser gerenciado ou desabilitado no Banco de Dados SQL do Azure e na Instância Gerenciada SQL do Azure.

No Espelhamento de Malha, o log de transações do banco de dados SQL de origem é monitorado. Um autoreed só será acionado quando as três condições a seguir forem verdadeiras:

  • O log de transações está mais de @autoreseedthreshold por cento cheio, por exemplo, 70. No SQL Server, configure esse valor ao habilitar o recurso, com sys.sp_change_feed_configure_parameters.
  • O motivo da reutilização do log é REPLICATION.
  • Como a espera de reutilização de REPLICATION log pode ser acionada para outros recursos, como replicação transacional ou CDC, o autoreseed só ocorre quando sys.databases.is_data_lake_replication_enabled = 1. Esse valor é configurado pelo Espelhamento de Fabric.

Diagnose

Para identificar se o espelhamento de malha está a impedir o truncamento do log de um banco de dados em espelho, verifique a coluna log_reuse_wait_desc na vista do catálogo de sistema sys.databases para ver se o motivo é REPLICATION. Para mais informações sobre os tipos de espera na reutilização de logs, consulte Fatores que atrasam o truncamento do log de transações. Por exemplo:

SELECT [name], log_reuse_wait_desc 
FROM sys.databases 
WHERE is_data_lake_replication_enabled = 1;

Se a consulta mostrar REPLICATION tipo de espera de reutilização do log, devido ao espelhamento do Fabric, o log de transações não conseguirá esvaziar as transações já confirmadas e continuará a ser preenchido.

Use o seguinte script T-SQL para verificar o espaço total do log, o uso atual do log e o espaço disponível:


USE <Mirrored database name>
GO 
--initialize variables
DECLARE @total_log_size bigint = 0; 
DECLARE @used_log_size bigint = 0;
DECLARE @size int;
DECLARE @max_size int;
DECLARE @growth int;

--retrieve total log space based on number of log files and growth settings for the database
DECLARE sdf CURSOR
FOR
SELECT SIZE*1.0*8192/1024/1024 AS [size in MB],
            max_size*1.0*8192/1024/1024 AS [max size in MB],
            growth
FROM sys.database_files
WHERE TYPE = 1 
OPEN sdf 
FETCH NEXT FROM sdf INTO @size,
                @max_size,
                @growth 
WHILE @@FETCH_STATUS = 0 
BEGIN
SELECT @total_log_size = @total_log_size + 
CASE @growth
        WHEN 0 THEN @size
        ELSE @max_size
END 
FETCH NEXT FROM sdf INTO @size,
              @max_size,
              @growth 
END 
CLOSE sdf;
DEALLOCATE sdf;

--current log space usage
SELECT @used_log_size = used_log_space_in_bytes*1.0/1024/1024
FROM sys.dm_db_log_space_usage;

-- log space used in percent
SELECT @used_log_size AS [used log space in MB],
       @total_log_size AS [total log space in MB],
       @used_log_size/@total_log_size AS [used log space in percentage];

Ativar autoreseed

Se o uso de log retornado pelo script T-SQL anterior estiver próximo de estar completo (por exemplo, superior a 70%), considere habilitar o banco de dados espelhado para repropagação automática usando o procedimento armazenado do sistema sys.sp_change_feed_configure_parameters. Por exemplo, para ativar o comportamento de autoreseed:

USE <Mirrored database name>
GO
EXECUTE sys.sp_change_feed_configure_parameters 
  @autoreseed = 1
, @autoreseedthreshold = 70; 

Para obter mais informações, consulte sys.sp_change_feed_configure_parameters.

No banco de dados de origem, o reseed deve liberar o espaço do log de transações mantido pelo espelhamento. Emita um comando manual CHECKPOINT no banco de dados SQL Server de origem para forçar a liberação de espaço de log se o motivo da retenção ainda for o espelhamento. Para obter mais informações, consulte CHECKPOINT (Transact-SQL).

Repropagação manual

Como prática recomendada, pode testar a resemeadura manual para um banco de dados específico usando o procedimento armazenado a seguir para entender o impacto antes de ativar a funcionalidade de resemeadura automática.

USE <Mirrored database name>
GO
EXECUTE sp_change_feed_reseed_db_init @is_init_needed = 1;

Para obter mais informações, consulte sys.sp_change_feed_reseed_db_init.

Verifique se um reseed foi ativado

  • A coluna reseed_state no procedimento armazenado sys.sp_help_change_feed_settings do sistema na base de dados SQL de origem indica o estado atual de reseed.

    • 0 = Normal.
    • 1 = O banco de dados iniciou o processo de reinicialização para Fabric. Estado de transição.
    • 2 = O banco de dados está sendo reinicializado para malha e aguardando a reinicialização da replicação. Estado de transição. Quando a replicação é estabelecida, o estado de nova propagação é movido para 0.

    Para obter mais informações, consulte sys.sp_help_change_feed_settings.

  • Todas as tabelas habilitadas para espelhamento no banco de dados terão um valor de 7 para a state coluna em sys.sp_help_change_feed_table.

    Para obter mais informações, consulte sys.sp_help_change_feed_table.