Compartilhar via


Configurar o reseed automático para bancos de dados espelhados do Fabric do SQL Server

Este artigo aborda o reseeding automático para espelhar um banco de dados de uma instância do SQL Server.

Há certas situações em que atrasos no espelhamento para o Fabric podem levar a um 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 no banco de dados espelhado. Depois que o tamanho do log de transações atingir seu limite máximo definido, as gravações no banco de dados falharão. Para proteger os bancos de dados operacionais contra falhas de gravação para transações OLTP críticas, você pode configurar um mecanismo de autoreseed que permite que o log de transações seja truncado e reinicializa o espelhamento de banco de dados para o Fabric.

Uma resseada interrompe o fluxo de transações para o Microsoft Fabric 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 no Microsoft Fabric. Após o instantâneo, as alterações incrementais são replicadas.

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

O recurso de autoreseed é desabilitado por padrão no SQL Server 2025, para habilitar, veja Habilitar autoreseed. O recurso de autoreseed está habilitado e não pode ser gerenciado ou desabilitado no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure.

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

  • O log de transações está mais de @autoreseedthreshold porcentagem 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 gerada 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 Malha.

Diagnose

Para identificar se o espelhamento do Fabric está impedindo o truncamento de log para um banco de dados espelhado, verifique a log_reuse_wait_desc coluna no modo de exibição do catálogo do sys.databases sistema para ver se o motivo é REPLICATION. Para obter mais informações sobre os tipos de espera de reutilização de log, 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 o tipo de espera de reutilização de log, devido ao espelhamento do Fabric, o log de transações não poderá esvaziar transações confirmadas e continuará a ser preenchido.

Use o script T-SQL a seguir para verificar o espaço total do log, o uso do log atual 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];

Habilitar autoreseed

Se o uso de log retornado pelo script T-SQL anterior estiver perto de estar cheio (por exemplo, mais de 70%), considere habilitar o banco de dados espelhado para reutilização automática usando o procedimento armazenado do sys.sp_change_feed_configure_parameters sistema. Por exemplo, para habilitar 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, a resseada deve liberar o espaço de log de transações mantido por espelhamento. Emita um manual CHECKPOINT no banco de dados do SQL Server de origem para forçar a liberação do espaço de log se o motivo da espera ainda REPLICATION for devido ao espelhamento. Para obter mais informações, consulte CHECKPOINT (Transact-SQL).

Reutilizado manualmente

Como prática recomendada, você pode testar o reseed manual para um banco de dados específico usando o procedimento armazenado a seguir para entender o impacto antes de ativar a funcionalidade reativada 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.

Verificar se uma resseada foi disparada

  • A coluna reseed_state no procedimento armazenado de sistema sys.sp_help_change_feed_settings no banco de dados SQL de origem indica seu estado de reseed atual.

    • 0 = Normal.
    • 1 = O banco de dados iniciou o processo de reinicialização para o Fabric. Estado transitório.
    • 2 = O banco de dados está sendo reinicializado no Fabric e aguardando a reinicialização da replicação. Estado transitório. Quando a replicação é estabelecida, o estado de novamente é 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 na coluna state em sys.sp_help_change_feed_table.

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