Konfigurer automatisk reseed for Fabric-spejlede databaser fra SQL Server

Denne artikel omhandler automatisk genudbedring til spejling af en database fra en SQL Server-forekomst.

I visse situationer kan forsinkelser i spejling til Microsoft Fabric føre til øget brug af transaktionslogfiler. Denne stigning sker, fordi transaktionsloggen ikke kan afkortes, før de forpligtede ændringer er replikeret til den spejlede database. Når transaktionslogstørrelsen når sin maksimale definerede grænse, fejler skrivninger til databasen. Hvis du vil beskytte driftsdatabaser mod skrivefejl for kritiske OLTP-transaktioner, kan du konfigurere en mekanisme til automatisk udfyldning, der gør det muligt at afkorte transaktionsloggen og initialisere databasespejlingen til Fabric igen.

En resed stopper strømmen af transaktioner til Fabric fra den spejlede database og geninitialiserer spejlingen i den nuværende tilstand. Denne proces indebærer at generere et nyt indledende snapshot af tabellerne konfigureret til spejling og replikere dette snapshot til Fabric. Efter øjebliksbilledet replikeres trinvise ændringer.

Under genseedning er det spejlede databaseelement i Fabric tilgængeligt, men modtager ikke inkrementelle ændringer, før genindsættelsen er færdig. Kolonnen reseed_state i sys.sp_help_change_feed_settings angiver genseedningstilstanden.

Autoreseed-funktionen er deaktiveret som standard i SQL Server 2025. For at aktivere det, se Aktiver autoreseed. I Azure SQL Database og Azure SQL Managed Instance er denne funktion aktiveret, og du kan hverken administrere eller deaktivere den.

I Fabric Mirroring overvåges SQL-databasens transaktionslog. Et autoreseed udløses kun, når følgende tre betingelser er opfyldt:

  • Transaktionsloggen er mere end @autoreseedthreshold procent fuld, for eksempel, 70. På SQL Server konfigurerer du denne værdi, når du aktiverer funktionen, ved at bruge sys.sp_change_feed_configure_parameters.
  • Årsagen til genbrug af log er REPLICATION.
  • Da ventetiden på genbrug af REPLICATION log kan udløses for andre funktioner, f.eks. transaktionsreplikering eller CDC, sker automatisk genudsætning kun, når sys.databases.is_data_lake_replication_enabled = 1. Denne værdi konfigureres af Fabric Mirroring.

Diagnosticere

For at identificere, om Fabric-spejling forhindrer logtrunkering for en spejlet database, skal du tjekke kolonnen log_reuse_wait_desc i systemkatalogvisningen sys.databases for at afgøre, om årsagen er REPLICATION. Du kan finde flere oplysninger om ventetyperne for genbrug af logfiler under Faktorer, der forsinker afkortning af transaktionsloggen. Det kan f.eks. være:

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

Hvis forespørgslen viser REPLICATION log-genbrugs-ventetype, kan transaktionsloggen på grund af Fabric-mirroring ikke tømme de forpligtede transaktioner og fortsætter med at fyldes.

Brug følgende T-SQL-script til at kontrollere den samlede logplads og det aktuelle logforbrug og den tilgængelige plads:


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

Aktiver automatisk genudplantning

Hvis logbrugen, der returneres af det forrige T-SQL-script, næsten er fuld (for eksempel mere end 70%), overvej at aktivere den spejlede database til automatisk genseeding ved at bruge systemlagret sys.sp_change_feed_configure_parameters procedure. Hvis du f.eks. vil aktivere funktionsmåden for automatisk genseedning:

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

Du kan finde flere oplysninger i sys.sp_change_feed_configure_parameters.

I kildedatabasen bør resed-processen frigive transaktionslogpladsen, der holdes ope ved spejling. Hvis forsinkelsen stadig REPLICATION skyldes spejling, udgiv en manual CHECKPOINT på kilde-SQL Server-databasen for at tvinge frigivelsen af logplads. For mere information, se CHECKPOINT (Transact-SQL).

Manuel gensåning

Vi anbefaler, at du tester manuel gensåning for en specifik database ved at bruge følgende lagrede procedure, så du forstår effekten, før du aktiverer automatisk gensåning.

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

Du kan finde flere oplysninger i sys.sp_change_feed_reseed_db_init.

Kontroller, om en genseed er blevet udløst

  • Kolonnen reseed_state i systemlagret-proceduren sys.sp_help_change_feed_settings på kilde-SQL-databasen viser den aktuelle seed-tilstand.

    • 0 = Normalt.
    • 1 = Databasen har startet processen med at initialisere til Fabric igen. Overgangstilstand.
      • 2= Databasen geninitialiserer til Fabric og venter på, at replikationen genstarter. Overgangstilstand. Når replikation er etableret, ændres den genindsatte tilstand til 0.

    Du kan finde flere oplysninger i sys.sp_help_change_feed_settings.

  • Alle tabeller, der er aktiveret til spejling i databasen, har en værdi af 7 for kolonnen state i sys.sp_help_change_feed_table.

    Du kan finde flere oplysninger i sys.sp_help_change_feed_table.