Zdieľať cez


Automatické opätovné nasadenie zrkadlených databáz Fabric zo služby Azure SQL Managed Instance

Tento článok sa zaoberá automatickým opätovným nasadením na zrkadlenie databázy v Azure SQL Managed Instance.

Za určitých podmienok, ak dôjde k oneskoreniu zrkadlenia do služby Fabric, môže dôjsť k zvýšenému používaniu súboru denníka transakcií. Denník transakcií nie je možné skrátiť, kým sa potvrdené zmeny nereplikujú do zrkadlenej databázy. Keď veľkosť denníka transakcií dosiahne maximálny definovaný limit, zápisy do databázy zlyhajú.

Na ochranu prevádzkových databáz pred zlyhaním zápisu kritických OLTP transakcií používa zrkadlenie v Azure SQL Database a Azure SQL Managed Instance schopnosť autoreseed, ktorá umožňuje skrátiť transakčný log a znovu inicializovať zrkadlenie databázy do Fabric.

Reseed zastaví tok transakcií do Microsoft Fabric zo zrkadlenej databázy a znova inicializuje zrkadlenie v súčasnom stave. Reseed zahŕňa vygenerovanie novej počiatočnej snímky tabuliek nakonfigurovaných na zrkadlenie a jej replikáciu do služby Microsoft Fabric. Po snímke sa replikujú prírastkové zmeny.

V Azure SQL Database a Azure SQL Managed Instance môže k opätovnému nasadeniu dôjsť na úrovni databázy alebo na úrovni tabuľky.

  • Opätovné nasadenie na úrovni databázy: Prebiehajúce zrkadlenie údajov sa zastaví pre všetky tabuľky v databáze, ktoré sú povolené na zrkadlenie, denník transakcií sa skráti a zrkadlenie sa znova inicializuje pre databázu opätovným publikovaním počiatočnej snímky všetkých tabuliek povolených na zrkadlenie. Potom sa postupné zmeny neustále replikujú.

  • Opätovné nasadenie na úrovni tabuľky: Prebiehajúce zrkadlenie údajov sa zastaví iba pre tabuľky, ktoré vyžadujú opätovné nasadenie. Zrkadlenie sa pre ovplyvnené tabuľky opätovne inicializuje opätovným publikovaním počiatočnej snímky. Potom sa postupné zmeny neustále replikujú.

Príčiny automatického opätovného nasadenia na úrovni databázy

Reseed na úrovni databázy chráni dostupnosť zápisu do databázy tým, že zabezpečuje, aby sa transakčný denník nezväčšil na maximálnu veľkosť. Maximálna veľkosť denníka transakcií je založená na cieli úrovne služby databázy Azure SQL Database alebo Azure SQL Managed Instance. Využitie denníka transakcií pre databázu s povoleným zrkadlením štruktúry môže naďalej rásť a zdržiavať skrátenie denníka. Keď veľkosť transakčného denníka dosiahne maximálny definovaný limit, zápisy do databázy zlyhajú.

  • K skráteniu protokolu v dôsledku zrkadlenia môže dôjsť z viacerých dôvodov:

    • Latencia pri zrkadlení údajov zo zdroja do zrkadlenej databázy zabraňuje skráteniu transakcií čakajúcich na replikáciu z denníka transakcií.
    • Dlhotrvajúce replikované transakcie čakajúce na replikáciu nie je možné skrátiť a ponechať priestor denníka transakcií.
    • Pretrvávajúce chyby pri zápise do pristávacej zóny v OneLake môžu zabrániť replikácii.
      • Tento scenár môže byť spôsobený nedostatočnými oprávneniami. Zrkadlenie na Fabric používa System Assigned Managed Identity (SAMI) alebo User Assigned Managed Identity (UAMI) na zápis do pristávacej zóny v One Lake. Ak to nie je správne nastavené, replikácia transakcií môže opakovane zlyhávať.

        Poznámka

        Podpora pre používateľom priradenú spravovanú identitu (UAMI) je momentálne vo fáze náhľadu.

  • Ak sa kapacita štruktúry pozastaví a obnoví, stav zrkadlenej databázy zostane pozastavený. V dôsledku toho sa zmeny vykonané v zdroji nereplikujú do OneLake. Ak chcete obnoviť zrkadlenie, prejdite do zrkadlenej databázy na portáli Fabric a vyberte položku Pokračovať v replikácii. Zrkadlenie pokračuje od miesta, kde bolo pozastavené.

    Ak kapacita štruktúry zostane pozastavená na dlhší čas, zrkadlenie sa nemusí obnoviť od bodu zastavenia a znova nasadí údaje od začiatku. Je to preto, že pozastavenie zrkadlenia na dlhší čas môže spôsobiť nárast využitia denníka transakcií zdrojovej databázy a pozastavenie skrátenia protokolu. Ak je po obnovení zrkadlenia použitý priestor súboru denníka transakcií takmer plný, spustí sa opätovné nasadenie databázy, aby sa uvoľnil zadržaný priestor denníka.

Príčiny automatického opätovného výsevu na úrovni tabuľky

Keď dôjde k zmenám schémy v zdrojových tabuľkách, ktoré sú povolené na zrkadlenie, schéma pre tieto zrkadlené tabuľky v službe Fabric sa už nezhoduje so zdrojom. Môže sa to stať v dôsledku nasledujúcich ALTER TABLE príkazov T-SQL (DATA DEFINITION LANGUAGE) (DDL) v zdroji:

  • Pridanie/vypustenie/zmena/premenovanie stĺpca
  • Skrátiť/premenovať tabuľku
  • Pridanie neklastrovaného primárneho kľúča

Opätovné nasadenie sa spustí iba pre ovplyvnené tabuľky.

Diagnostikovať

Ak chcete zistiť, či zrkadlenie štruktúry bráni skráteniu denníka pre zrkadlenú databázu, skontrolujte log_reuse_wait_desc stĺpec v sys.databases zobrazení systémového katalógu a zistite, či je REPLICATIONdôvodom . Ďalšie informácie o typoch čakania na opätovné použitie denníka nájdete v téme Faktory, ktoré oneskorujú skrátenie denníka transakcií. Príklad:

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

Ak dotaz zobrazuje REPLICATION typ čakania na opätovné použitie protokolu, potom z dôvodu zrkadlenia v technológii nemôže denník transakcií vyprázdniť potvrdené transakcie a bude pokračovať v vypĺňaní. Ďalšie riešenie problémov s používaním denníkov v Azure SQL Database nájdete v téme Riešenie chýb denníka transakcií pomocou Azure SQL Database.

Pomocou nasledujúceho skriptu T-SQL skontrolujte celkový priestor denníka a aktuálne využitie protokolu a dostupné miesto:


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

Počas opätovného výsevu

Počas opätovného nasadenia je zrkadlená položka databázy v službe Microsoft Fabric k dispozícii, ale neprijme prírastkové zmeny, kým sa opätovné nasadenie nedokončí. Stĺpec reseed_state v sys.sp_help_change_feed_settings označuje stav opätovného nasadenia.

V zrkadlení zdrojových látok sa monitoruje transakčný denník zdrojovej databázy SQL. Automatické nastavenie sa spustí iba vtedy, keď sú splnené nasledujúce tri podmienky:

  • Protokol transakcií je naplnený viac ako @autoreseedthreshold percentami, 70napríklad .
  • Dôvod opätovného použitia protokolu je REPLICATION.
  • Keďže čakanie na opätovné použitie protokolu REPLICATION je možné zvýšiť pre iné funkcie, ako je napríklad transakčná replikácia alebo CDC, automatické nastavenie sa vyskytne iba vtedy, keď sys.databases.is_data_lake_replication_enabled = 1. Táto hodnota je nakonfigurovaná zrkadlením látok.

Skontrolujte, či sa spustilo opätovné začatie na úrovni databázy

Ak sa presadzuje celá databáza, vyhľadajte nasledujúce podmienky.

  • Stĺpec reseed_state v systémovej uloženej procedúre sys.sp_help_change_feed_settings v zdrojovej databáze SQL označuje jej aktuálny stav opätovného nasadenia.

    • 0 = Normálne.
    • 1 = Databáza spustila proces opätovnej inicializácie do Fabric. Prechodný stav.
    • 2 = Databáza sa reinicializuje do Fabric a čaká na reštartovanie replikácie. Prechodný stav. Po vytvorení replikácie sa stav opätovného nasadenia presunie na 0.

    Ďalšie informácie nájdete v časti sys.sp_help_change_feed_settings.

  • Všetky tabuľky povolené na zrkadlenie v databáze budú mať hodnotu 7 pre state stĺpec v sys.sp_help_change_feed_table.

    Ďalšie informácie nájdete v téme sys.sp_help_change_feed_table.

Skontrolujte, či sa spustilo opätovné nasadenie na úrovni tabuľky

  • Pre každú tabuľku, ktorá sa opätovne nasadí, vyhľadajte hodnotu 7 stĺpca state v sys.sp_help_change_feed_tablerozhraní .

    Ďalšie informácie nájdete v téme sys.sp_help_change_feed_table.