Dela via


Konfigurera automatisk återställning för infrastrukturspeglingsdatabaser från SQL Server

Den här artikeln behandlar automatisk återseeding för databasspegling från en SQL Server-instans.

Viktigt!

Den här funktionen är i förhandsversion.

Det finns vissa situationer där fördröjningar i speglingen till Infrastrukturresurser kan leda till ökad användning av transaktionsloggfiler. Det beror på att transaktionsloggen inte kan trunkeras förrän de genomförda ändringarna har replikerats till den speglade databasen. När transaktionsloggens storlek når sin maximala definierade gräns misslyckas skrivningar till databasen. För att skydda driftdatabaser från skrivfel för kritiska OLTP-transaktioner kan du konfigurera en mekanism med automatisk genomstrykning som gör att transaktionsloggen trunkeras och initierar om databasspeglingen till Infrastrukturresurser.

En återställd stoppar flödet av transaktioner till Microsoft Fabric från den speglade databasen och initierar speglingen igen i det aktuella tillståndet. Detta innebär att du genererar en ny första ögonblicksbild av tabellerna som konfigurerats för spegling och replikerar den till Microsoft Fabric. Efter ögonblicksbilden replikeras inkrementella ändringar.

Under återställningen är det speglade databasobjektet i Microsoft Fabric tillgängligt men får inte inkrementella ändringar förrän det återställda har slutförts. Kolumnen reseed_state i sys.sp_help_change_feed_settings anger det återställda tillståndet.

Funktionen automatiskt inaktiverad är inaktiverad som standard i SQL Server 2025 (förhandsversion) för att aktivera se Aktivera automatiskt. Funktionen för automatisk borttagning är aktiverad och kan inte hanteras eller inaktiveras i Azure SQL Database och Azure SQL Managed Instance.

I Infrastrukturspegling övervakas SQL Database-källtransaktionsloggen. En autoreseed utlöses endast när följande tre villkor är uppfyllda:

  • Transaktionsloggen är mer än @autoreseedthreshold procent full, till exempel 70. På SQL Server konfigurerar du det här värdet när du aktiverar funktionen med sys.sp_change_feed_configure_parameters.
  • Loggens återanvändningsorsak är REPLICATION.
  • Eftersom loggens REPLICATION återanvändningsvänte kan aktiveras för andra funktioner, till exempel transaktionsreplikering eller CDC, sker autoväxling endast när sys.databases.is_data_lake_replication_enabled = 1. Det här värdet konfigureras av Infrastrukturspegling.

Diagnose

Om du vill ta reda på om infrastrukturspegling förhindrar loggtrunkering för en speglad databas kontrollerar du log_reuse_wait_desc kolumnen i sys.databases systemkatalogvyn för att se om orsaken är REPLICATION. Mer information om loggens återanvändningsväntetyper finns i Faktorer som fördröjer trunkering av transaktionsloggar. Till exempel:

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

Om frågan visar REPLICATION loggens återanvändningsväntetyp kan transaktionsloggen inte tömma de incheckade transaktionerna på grund av fabric-spegling och fortsätter att fyllas.

Använd följande T-SQL-skript för att kontrollera det totala loggutrymmet och aktuell logganvändning och tillgängligt utrymme:


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];

Aktivera automatiskt

Om logganvändningen som returnerades av det tidigare T-SQL-skriptet nästan är full (till exempel större än 70%), bör du överväga att aktivera den speglade databasen för automatisk återställning med hjälp av den sys.sp_change_feed_configure_parameters system lagrade proceduren. Om du till exempel vill aktivera det automatiska beteendet:

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

Mer information finns i sys.sp_change_feed_configure_parameters.

I källdatabasen bör den återställda versionen av transaktionsloggutrymmet som lagras av spegling frigöras. Utfärda en handbok CHECKPOINT för SQL Server-källdatabasen för att framtvinga frisläppning av loggutrymmet om orsaken till undantaget fortfarande REPLICATION beror på spegling. Mer information finns i CHECKPOINT (Transact-SQL).

Manuell återansluten

Som bästa praxis kan du testa manuella återställningar för en specifik databas med hjälp av följande lagrade procedur för att förstå effekten innan du aktiverar funktionen för automatisk återställning.

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

Mer information finns i sys.sp_change_feed_reseed_db_init.

Kontrollera om en återställd har utlösts

  • Kolumnen reseed_state i den system lagrade proceduren sys.sp_help_change_feed_settings i SQL-källdatabasen anger dess aktuella återställda tillstånd.

    • 0 = Normal.
    • 1 = Databasen har påbörjat processen med att initiera om till Infrastrukturresurser. Övergångstillstånd.
    • 2 = Databasen initieras om till Infrastrukturresurser och väntar på att replikeringen ska startas om. Övergångstillstånd. När replikeringen upprättas flyttas tillståndet som har återställts till 0.

    Mer information finns i sys.sp_help_change_feed_settings.

  • Alla tabeller som är aktiverade för spegling i databasen har värdet 7 för state kolumnen i sys.sp_help_change_feed_table.

    Mer information finns i sys.sp_help_change_feed_table.