Sdílet prostřednictvím


Monitorování výkonu skupin dostupnosti AlwaysOn

platí pro:SQL Server

Aspekt výkonu skupin dostupnosti AlwaysOn je zásadní pro zachování smlouvy o úrovni služeb (SLA) pro důležité databáze. Pochopení toho, jak skupiny dostupnosti přenášejí protokoly do sekundárních replik, vám pomůže odhadnout cíl doby obnovení (RTO) a cíl bodu obnovení (RPO) vaší implementace dostupnosti a identifikovat úzká místa v případě špatného výkonu skupin dostupnosti nebo replik. Tento článek popisuje proces synchronizace, ukazuje, jak vypočítat některé klíčové metriky a poskytuje odkazy na některé běžné scénáře řešení potíží s výkonem.

Proces synchronizace dat

Pokud chcete odhadnout dobu úplné synchronizace a identifikovat kritické body, musíte pochopit proces synchronizace. Kritické body výkonu můžou být kdekoli v procesu a vyhledání kritického bodu vám může pomoct prozkoumat hlubší informace o hlubších problémech. Následující obrázek a tabulka znázorňují proces synchronizace dat:

synchronizace dat skupiny dostupnosti

Posloupnost Popis kroku Komentáře Užitečné metriky
1 Generování protokolů Data protokolu jsou zapsána na disk. Tento záznam musí být replikován do sekundárních kopií. Záznamy protokolu vstupují do fronty pro odesílání. SQL Server:Database > bajty logu vyprázdněné/sekundu
2 Zajmout Protokoly pro každou databázi se zaznamenávají a odesílají do odpovídající partnerské fronty (jedna pro každou dvojici databáze a repliky). Tento proces zachytávání běží nepřetržitě, pokud je replika dostupnosti připojená, přičemž přesun dat není z jakéhokoli důvodu pozastaven, a pár repliky databáze se zobrazuje jako synchronizující nebo synchronizovaný. Pokud proces zachytávání nedokáže zprávy rychle proskenovat a zařadit do fronty, hromadí se fronta na odesílání protokolů. SQL Server:Replika dostupnosti > Bajty odeslané do repliky\s, což je agregace součtu všech databázových zpráv zařazených do fronty pro danou repliku dostupnosti.

log_send_queue_size (KB) a log_bytes_send_rate (KB/s) na primární replice.
3 Poslat Zprávy v každé frontě repliky databáze se vyřadí z fronty a elektronicky se odešlou do příslušné sekundární repliky. SQL Serveru: Replika dostupnosti > odeslané bajty do přenosu za sekundu
4 Přijmout a uložit do mezipaměti Každá sekundární replika zprávu přijme a ukládá do mezipaměti. Čítač výkonu SQL Server: Replika dostupnosti > Bajty protokolu přijaté za sekundu
5 Ztvrdnout Protokol se vyprázdní na sekundární replice pro posílení zabezpečení. Po vyprázdnění protokolu se potvrzení odešle zpět k primární replice.

Jakmile je protokol zpevněn, ztrátě dat se vyhnete.
Čítač výkonu SQL Server:Database > bajtů protokolu vyprázdněných za sekundu

Typ čekání HADR_LOGCAPTURE_SYNC
6 Předělat Proveďte znovu operaci pro vyprázdnění stránek na sekundární replice. Stránky se uchovávají ve frontě opakování, protože čekají na opětovné dokončení. SQL Server:Replika databáze > přepracované bajty za sekundu

redo_queue_size (KB) a redo_rate.

Typ čekání REDO_SYNC

Brány řízení proudění

Skupiny dostupnosti jsou navrženy s branami řízení toku na primární replice, aby se zabránilo nadměrné spotřebě prostředků, jako jsou síťové a paměťové prostředky, na všech replikách dostupnosti. Tyto brány řízení toku nemají vliv na stav synchronizace dostupnostních replik, ale můžou ovlivnit celkový výkon databází dostupnosti, včetně RPO.

Po zachycení protokolů na primární replice se na ně vztahují dvě úrovně řízení toku. Po dosažení prahové hodnoty zprávy kterékoliv brány se zprávy protokolu již neposílají do konkrétní repliky nebo pro konkrétní databázi. Zprávy lze odeslat po přijetí zpráv potvrzení pro odeslané zprávy, aby se počet odeslaných zpráv dostal pod prahovou hodnotu.

Kromě bran řízení toku existuje další faktor, který může zabránit odesílání zpráv protokolu. Synchronizace replik zajišťuje, že se zprávy odesílají a aplikují v pořadí podle čísla protokolu (LSN). Před odesláním zprávy protokolu je nejprve zkontrolováno její LSN vůči nejnižšímu potvrzenému číslu LSN, aby se zajistilo, že je menší než jedna z prahových hodnot (v závislosti na typu zprávy). Pokud je mezera mezi dvěma čísly LSN větší než prahová hodnota, zprávy se neodesílají. Jakmile mezera opět klesne pod prahovou hodnotu, zprávy se odešlou.

SQL Server 2022 zvyšuje limity počtu zpráv, které každá brána umožňuje. Pomocí příznaku trasování 12310 je zvýšený limit dostupný také pro následující verze SQL Serveru počínaje SQL Server 2019 CU9, SQL Server 2017 CU18 a SQL Server 2016 SP1 CU16.

Následující tabulka porovnává omezení zpráv:

SQL Server 2022 a podporované verze SQL Serveru (počínaje SQL Serverem 2019 CU9, SQL Serverem 2017 CU18 a SQL Serverem 2016 SP1 CU16), které používají příznak trasování 12310, vidí následující omezení:

Úroveň Počet bran Počet zpráv Užitečné metriky
Přeprava 1 na dostupnostní repliku 16384 Rozšířená událost database_transport_flow_control_action
Databáze 1 pro databázi dostupnosti 7168 DBMIRROR_SEND

Rozšířené události hadron_database_flow_control_action.

Dva užitečné čítače výkonu, SQL Server:Replika dostupnosti > řízení toku/s a SQL Server:Replika dostupnosti > Čas řízení toku (ms/s), ukazují v poslední sekundě, kolikrát bylo řízení toku aktivováno a kolik času bylo stráveno čekáním na řízení toku. Delší čekací doba u řízení toku znamená vyšší RPO. Další informace o typech problémů, které můžou způsobit dlouhou dobu čekání při řízení toku, najdete v tématu Řešení potíží: Skupina dostupnosti překročila cíle bodu obnovení (RPO).

Odhad doby převzetí služeb při selhání (RTO)

RTO ve vašem SLA závisí na době převzetí služeb při selhání implementace Always On v každém okamžiku, což lze vyjádřit následujícím vzorcem:

Výpočet RTO skupin dostupnosti

Důležitý

Pokud skupina dostupnosti obsahuje více než jednu databázi dostupnosti, stane se z databáze dostupnosti s nejvyšší hodnotou Tfailover limitující hodnota pro dodržování předpisů RTO.

Doba detekce selhání, Tdetection, je doba, která trvá, než systém zjistí selhání. Tentokrát závisí na nastavení na úrovni clusteru a ne na jednotlivých replikách dostupnosti. V závislosti na stavu automatického převzetí služeb při selhání, který je nakonfigurovaný, se dá převzetí služeb při selhání aktivovat jako okamžitá odpověď na kritickou vnitřní chybu SQL Serveru, jako jsou osamocené spinlocky. V tomto případě může být detekce stejně rychlá jako odeslání zprávy o chybách sp_server_diagnostics (Transact-SQL) do clusteru WSFC (výchozí interval je 1/3 časového limitu pro kontrolu stavu). Převzetí služeb při selhání lze také spustit kvůli vypršení časového limitu, například pokud vypršel časový limit kontroly stavu clusteru (ve výchozím nastavení 30 sekund) nebo pokud vypršel pronájem mezi knihovnou DLL prostředků a instancí SQL Serveru (ve výchozím nastavení 20 sekund). V tomto případě je doba detekce stejně dlouhá jako interval časového limitu. Pro více informací si přečtěte část Flexibilní zásady převzetí služeb při selhání pro automatické převzetí služeb při selhání dostupnostní skupiny (SQL Server).

Jedinou věcí, kterou sekundární replika musí udělat, aby se připravila na převzetí služeb při selhání, je, aby znovu zachytila až na konec protokolu. Čas opakování Tredo se vypočítá pomocí následujícího vzorce:

Výpočet času obnovení ve skupinách dostupnosti

kde redo_queue je hodnota v redo_queue_size a redo_rate je hodnota v redo_rate.

Režijní doba převzetí služeb při selhání, Toverhead, zahrnuje dobu potřebnou k převzetí služeb při selhání clusteru WSFC a převést databáze do režimu online. Tento čas je obvykle krátký a konstantní.

Odhad potenciální ztráty dat (RPO)

Cíl bodu obnovení ve vašem SLA závisí na možné ztrátě dat vaší implementace Always On v daném okamžiku. Tuto možnou ztrátu dat lze vyjádřit v následujícím vzorci:

výpočet RPO pro skupiny dostupnosti

kde log_send_queue je hodnota log_send_queue_size a rychlost generování protokolů je hodnota SQL Server:Database > bajtů protokolu vyprázdněných za sekundu.

Varování

Pokud skupina dostupnosti obsahuje více než jednu databázi dostupnosti, pak se databáze dostupnosti s nejvyšší Tdata_loss stane mezní hodnotou k dodržení RPO.

Fronta odeslání protokolu představuje všechna data, která je možné ztratit z závažného selhání. Na první pohled je zvědavé, že se místo rychlosti odesílání protokolů používá rychlost generování protokolů (viz log_send_rate). Mějte ale na paměti, že použití rychlosti odesílání protokolu vám poskytuje čas pro synchronizaci. Naopak, RPO (cíl bodu obnovení) měří ztrátu dat podle toho, jak rychle se data generují, nikoli jak rychle se synchronizují.

Jednodušší způsob odhadu Tdata_loss je použití last_commit_time. Dynamické zobrazení managementu (DMV) na primární replice uvádí tuto hodnotu pro všechny repliky. Můžete vypočítat rozdíl mezi hodnotou primární repliky a hodnotou sekundární repliky a odhadnout, jak rychle sekudární replika dohání primární repliku. Jak jsme uvedli dříve, tento výpočet vám neřekne potenciální ztrátu dat na základě toho, jak rychle se protokol vygeneruje, ale měla by to být úzká aproximace.

Odhad RTO a RPO & pomocí řídicího panelu SSMS

Ve skupinách s vysokou dostupností Always On se pro databáze umístěné na sekundárních replikách vypočítává a zobrazuje RTO a RPO. Na řídicím panelu primární repliky jsou RTO (Cíl obnovy času) a RPO (Cíl bodu obnovení) seskupeny podle sekundární repliky.

Pro zobrazení RTO a RPO na řídicím panelu postupujte následovně:

  1. V aplikaci SQL Server Management Studio rozbalte uzel Always On Vysoká dostupnost, klikněte pravým tlačítkem na název skupiny dostupnosti a vyberte možnost Zobrazit řídicí panel.

  2. Vyberte Přidat nebo Odebrat Sloupce na kartě Seskupovat Podle. Zkontrolujte Odhadovanou Dobu Obnovení (sekundy) [RTO] a Odhadovanou Ztrátu Dat (čas) [RPO].

    snímek obrazovky s řídicím panelem RPO RTO

Výpočet RTO sekundární databáze

Výpočet doby obnovení určuje, kolik času je potřeba k obnovení sekundární databáze po převedení. Doba převzetí služeb při selhání je obvykle krátká a konstantní. Doba detekce závisí na nastavení na úrovni clusteru a ne na jednotlivých replikách dostupnosti.

Pro sekundární databázi (DB_sec) je výpočet a zobrazení její RTO založen na její redo_queue_size a redo_rate:

Výpočet RTO

Kromě rohových případů vzorec pro výpočet RTO sekundární databáze je:

Vzorec pro výpočet RTO

Výpočet RPO sekundární databáze

Pro sekundární databázi (DB_sec) je výpočet a zobrazení bodu obnovení založen na parametrech jako jeho `is_failover_ready`, `last_commit_time` a odpovídajícím `last_commit_time` primární databáze (DB_pri). Pokud sekundární database.is_failover_ready = 1, pak se daa synchronizuje a při převzetí služeb při selhání nedojde ke ztrátě dat. Pokud je však tato hodnota 0, je mezi last_commit_time v primární databázi a last_commit_time v sekundární databázi mezera.

U primární databáze je last_commit_time čas, kdy byla potvrzena nejnovější transakce. U sekundární databáze je last_commit_time nejnovějším časem potvrzení transakce v primární databázi, která byla úspěšně posílena i v sekundární databázi. Toto číslo by mělo být stejné pro primární i sekundární databázi. Mezera mezi těmito dvěma hodnotami představuje časový úsek, během něhož čekající transakce nebyly zapsány v sekundární databázi a v případě přepnutí by došlo ke ztrátě.

výpočet RPO

Čítače výkonu používané ve vzorcích RTO/RPO

  • redo_queue_size (KB) [použité v RTO]: Velikost fronty zápisu je úsek transakčních protokolů mezi last_received_lsn a last_redone_lsn. last_received_lsn je ID bloku protokolu identifikující bod, do kterého byly přijaty všechny bloky protokolu sekundární replikou, která je hostitelem této sekundární databáze. Last_redone_lsn je pořadové číslo protokolu posledního záznamu protokolu, který byl opětovně proveden v sekundární databázi. Na základě těchto dvou hodnot můžeme najít ID počátečního bloku protokolu (last_received_lsn) a koncového bloku protokolu (last_redone_lsn). Mezera mezi těmito dvěma bloky protokolu pak může představovat, kolik bloků transakčního protokolu dosud nebylo znovu provedeno. Měří se v kilobajtech (KB).
  • redo_rate (KB/s) [použité v RTO]: Akumulovaná hodnota, která ukazuje, kolik transakčního logu (KB) bylo zapsáno zpět v sekundární databázi v kilobajtech (KB) za sekundu během určitého časového úseku.
  • last_commit_time (Datetime) [použité v RPO]: U primární databáze je last_commit_time čas, kdy byla potvrzena poslední transakce. U sekundární databáze je last_commit_time nejnovější čas potvrzení transakce z primární databáze, který byl úspěšně zapsán i do sekundární databáze. Vzhledem k tomu, že tato hodnota na sekundárním serveru by měla být synchronizována se stejnou hodnotou na primárním serveru, všechny mezery mezi těmito dvěma hodnotami jsou odhadem ztráty dat (RPO).

Odhad RTO a RPO pomocí zobrazení dynamické správy

Je možné dotazovat zobrazení dynamické správy sys.dm_hadr_database_replica_states a sys.dm_hadr_database_replica_cluster_states, aby bylo možné odhadnout cíl bodu obnovení (RPO) a plánovanou dobu obnovení (RTO) databáze. Následující dotazy vytvářejí uložené procedury, které dělají obě věci.

Poznámka

Nejprve vytvořte a spusťte uloženou proceduru pro odhad RTO, protože hodnoty, které vytváří, jsou nezbytné ke spuštění uložené procedury pro odhad RPO.

Vytvoření uložené procedury pro odhad RTO

  1. Na cílové sekundární replice vytvořte uloženou proceduru proc_calculate_RTO. Pokud už tato uložená procedura existuje, nejprve ji odstraňte a pak ji znovu vytvořte.
   if object_id(N'proc_calculate_RTO', 'p') is not null
       drop procedure proc_calculate_RTO
   go
   
   raiserror('creating procedure proc_calculate_RTO', 0,1) with nowait
   go
   --
   -- name: proc_calculate_RTO
   --
   -- description: Calculate RTO of a secondary database.
   -- 
   -- parameters:	@secondary_database_name nvarchar(max): name of the secondary database.
   --
   -- security: this is a public interface object.
   --
   create procedure proc_calculate_RTO
   (
   @secondary_database_name nvarchar(max)
   )
   as
   begin
 	  declare @db sysname
 	  declare @is_primary_replica bit 
 	  declare @is_failover_ready bit 
 	  declare @redo_queue_size bigint 
 	  declare @redo_rate bigint
 	  declare @replica_id uniqueidentifier
 	  declare @group_database_id uniqueidentifier
 	  declare @group_id uniqueidentifier
 	  declare @RTO float 

 	  select 
 	  @is_primary_replica = dbr.is_primary_replica, 
 	  @is_failover_ready = dbcs.is_failover_ready, 
 	  @redo_queue_size = dbr.redo_queue_size, 
 	  @redo_rate = dbr.redo_rate, 
 	  @replica_id = dbr.replica_id,
 	  @group_database_id = dbr.group_database_id,
 	  @group_id = dbr.group_id 
 	  from sys.dm_hadr_database_replica_states dbr join sys.dm_hadr_database_replica_cluster_states dbcs 	on dbr.replica_id = dbcs.replica_id and 
 	  dbr.group_database_id = dbcs.group_database_id  where dbcs.database_name = @secondary_database_name

 	  if  @is_primary_replica is null or @is_failover_ready is null or @redo_queue_size is null or @replica_id is null or @group_database_id is null or @group_id is null
 	  begin
 	  	print 'RTO of Database '+ @secondary_database_name +' is not available'
 	  	return
 	  end
 	  else if @is_primary_replica = 1
 	  begin
 	  	print 'You are visiting wrong replica';
 	  	return
 	  end

 	  if @redo_queue_size = 0 
 	  	set @RTO = 0 
 	  else if @redo_rate is null or @redo_rate = 0 
 	  begin
 	  	print 'RTO of Database '+ @secondary_database_name +' is not available'
 	  	return
 	  end
 	  else 
 	  	set @RTO = CAST(@redo_queue_size AS float) / @redo_rate
   
 	  print 'RTO of Database '+ @secondary_database_name +' is ' + convert(varchar, ceiling(@RTO))
 	  print 'group_id of Database '+ @secondary_database_name +' is ' + convert(nvarchar(50), @group_id)
 	  print 'replica_id of Database '+ @secondary_database_name +' is ' + convert(nvarchar(50), @replica_id)
 	  print 'group_database_id of Database '+ @secondary_database_name +' is ' + convert(nvarchar(50), @group_database_id)
   end
  1. Spusťte proc_calculate_RTO s názvem cílové sekundární databáze:
 exec proc_calculate_RTO @secondary_database_name = N'DB_sec'
  1. Výstup zobrazí hodnotu RTO cílové sekundární databáze repliky. Uložte group_id, replica_ida group_database_id pro použití s uloženou procedurou odhadu bodu obnovení.

    Ukázkový výstup:
    RTO databázového DB_sec je 0
    group_id databáze DB4 je F176DD65-C3EE-4240-BA23-EA615F965C9B
    replica_id databáze DB4 je 405554F6-3FDC-4593-A650-2067F5FABFFD
    group_database_id databáze DB4 je 39F7942F-7B5E-42C5-977D-02E7FFA6C392

Vytvoření uložené procedury pro odhad RPO (cíle bodu obnovení)

  1. Na primární replice vytvořte uloženou proceduru proc_calculate_RPO. Pokud už existuje, nejprve ho zahoďte a vytvořte ho znovu.
   if object_id(N'proc_calculate_RPO', 'p') is not null
   				drop procedure proc_calculate_RPO
   go
   
   raiserror('creating procedure proc_calculate_RPO', 0,1) with nowait
   go
   --
   -- name: proc_calculate_RPO
   --
   -- description: Calculate RPO of a secondary database.
   -- 
   -- parameters:	@group_id uniqueidentifier: group_id of the secondary database.
   --				@replica_id uniqueidentifier: replica_id of the secondary database.
   --				@group_database_id uniqueidentifier: group_database_id of the secondary database.
   --
   -- security: this is a public interface object.
   --
   create procedure proc_calculate_RPO
   (
    @group_id uniqueidentifier,
    @replica_id uniqueidentifier,
    @group_database_id uniqueidentifier
   )
   as
   begin
   	  declare @db_name sysname
   	  declare @is_primary_replica bit
   	  declare @is_failover_ready bit
   	  declare @is_local bit
   	  declare @last_commit_time_sec datetime 
   	  declare @last_commit_time_pri datetime      
   	  declare @RPO nvarchar(max) 

   	  -- secondary database's last_commit_time 
   	  select 
   	  @db_name = dbcs.database_name,
   	  @is_failover_ready = dbcs.is_failover_ready, 
   	  @last_commit_time_sec = dbr.last_commit_time 
   	  from sys.dm_hadr_database_replica_states dbr join sys.dm_hadr_database_replica_cluster_states dbcs on dbr.replica_id = dbcs.replica_id and 
   	  dbr.group_database_id = dbcs.group_database_id  where dbr.group_id = @group_id and dbr.replica_id = @replica_id and dbr.group_database_id = @group_database_id

   	  -- correlated primary database's last_commit_time 
   	  select
   	  @last_commit_time_pri = dbr.last_commit_time,
   	  @is_local = dbr.is_local
   	  from sys.dm_hadr_database_replica_states dbr join sys.dm_hadr_database_replica_cluster_states dbcs on dbr.replica_id = dbcs.replica_id and 
   	  dbr.group_database_id = dbcs.group_database_id  where dbr.group_id = @group_id and dbr.is_primary_replica = 1 and dbr.group_database_id = @group_database_id

   	  if @is_local is null or @is_failover_ready is null
   	  begin
   	  	print 'RPO of database '+ @db_name +' is not available'
   	  	return
   	  end

   	  if @is_local = 0
   	  begin
   	  	print 'You are visiting wrong replica'
   	  	return
   	  end  

   	  if @is_failover_ready = 1
   	  	set @RPO = '00:00:00'
   	  else if @last_commit_time_sec is null or  @last_commit_time_pri is null 
   	  begin
   	  	print 'RPO of database '+ @db_name +' is not available'
   	  	return
   	  end
   	  else
   	  begin
   	  	if DATEDIFF(ss, @last_commit_time_sec, @last_commit_time_pri) < 0
   	  	begin
   	  		print 'RPO of database '+ @db_name +' is not available'
   	  		return
   	  	end
   	  	else
   	  		set @RPO =  CONVERT(varchar, DATEADD(ms, datediff(ss ,@last_commit_time_sec, @last_commit_time_pri) * 1000, 0), 114)
   	  end
   	  print 'RPO of database '+ @db_name +' is ' + @RPO
     end
  1. Spusťte proc_calculate_RPO s group_idcílové sekundární databáze, replica_ida group_database_id.
  exec proc_calculate_RPO @group_id= 'F176DD65-C3EE-4240-BA23-EA615F965C9B',
       @replica_id =  '405554F6-3FDC-4593-A650-2067F5FABFFD',
       @group_database_id  = '39F7942F-7B5E-42C5-977D-02E7FFA6C392'
  1. Výstup zobrazí hodnotu RPO pro sekundární repliku cílové databáze.

Monitorování RTO a RPO

Tato část ukazuje, jak monitorovat skupiny dostupnosti pro metriky RTO a RPO. Tato ukázka je podobná kurzu grafického uživatelského rozhraní v Modelu stavu AlwaysOn, část 2: Rozšíření modelu stavu.

Prvky doby převzetí služeb při selhání a výpočtů potenciální ztráty dat v Odhad doby převzetí služeb při selhání (RTO) a Odhad potenciální ztráty dat (RPO) jsou pohodlně poskytovány jako metriky výkonu ve správním aspektu politiky Stav repliky databáze (viz Zobrazení spravovaných aspektů politiky na objektu SQL Serveru). Tyto dvě metriky můžete sledovat podle pravidelného harmonogramu a být upozorněni, když metriky překračují vaši dobu obnovy (RTO) a cíl bodu obnovy (RPO).

Ukázkové skripty vytvářejí dvě systémové zásady, které se spouštějí podle příslušných plánů, s následujícími vlastnostmi:

  • Zásada RTO, která selže, když odhadovaná doba převzetí služeb při selhání překročí 10 minut, se vyhodnotí každých 5 minut.

  • Zásada RPO, která selže, když odhadovaná ztráta dat překročí 1 hodinu, se vyhodnocuje každých 30 minut.

  • Dvě zásady mají shodnou konfiguraci na všech replikách dostupnosti.

  • Zásady se vyhodnocují na všech serverech, ale pouze u skupin dostupnosti, kde je místní replika primární replikou. Pokud místní replika dostupnosti není primární replikou, zásady se nevyhodnocují.

  • Selhání zásad se pohodlně zobrazují na řídicím panelu AlwaysOn, když je zobrazíte na primární replice.

Pokud chcete vytvořit zásady, postupujte podle pokynů níže ve všech instancích serveru, které se účastní skupiny dostupnosti:

  1. spusťte službu agenta SQL Serveru, pokud ještě není spuštěná.

  2. V aplikaci SQL Server Management Studio v nabídce Tools klepněte na Možnosti.

  3. Na kartě SQL Server Always On vyberte Povolit uživatelsky definované zásady Always On a klikněte na OK.

    Toto nastavení umožňuje zobrazit správně nakonfigurované vlastní zásady na řídicím panelu AlwaysOn.

  4. Pomocí následujících specifikací vytvořte podmínku správy založenou na zásadách:

    • Název: RTO

    • facet: stav repliky databáze

    • pole: Add(@EstimatedRecoveryTime, 60)

    • operátor: <=

    • hodnota: 600

    Tato podmínka selže, když potenciální doba převzetí služeb při selhání překročí 10 minut, včetně 60sekundové režie na detekci selhání i převzetí služeb při selhání.

  5. Vytvořte druhou podmínku správy založenou na zásadách s využitím následujících specifikací:

    • Název: RPO

    • facet: stav repliky databáze

    • pole: @EstimatedDataLoss

    • operátor: <=

    • hodnota: 3600

    Tato podmínka selže, když potenciální ztráta dat překročí 1 hodinu.

  6. Vytvořte třetí podmínku správy založenou na zásadách s využitím následujících specifikací:

    • Název: IsPrimaryReplica

    • Aspekt: Skupina dostupnosti

    • pole: @LocalReplicaRole

    • Operátor: =

    • hodnota: Primary

    Tato podmínka zkontroluje, jestli je replika místní dostupnosti pro danou skupinu dostupnosti primární replikou.

  7. Pomocí následujících specifikací vytvořte zásady správy založené na zásadách:

    • Obecná stránka:

      • Název: CustomSecondaryDatabaseRTO

      • Zkontrolujte podmínku: RTO

      • proti cílům: Každý stav repliky databáze v IsPrimaryReplica AvailabilityGroup

        Toto nastavení zajistí, že se politika vyhodnotí jenom u skupin dostupnosti, pro které je replika místní dostupnosti primární replikou.

      • režim vyhodnocení: Podle plánu

      • Plán: CollectorSchedule_Every_5min

      • Povoleno: vybráno

    • Popis stránka:

      • Kategorie: Upozornění databáze dostupnosti

        Toto nastavení umožňuje zobrazit výsledky vyhodnocení zásad na řídicím panelu AlwaysOn.

      • Popis: Aktuální replika má RTO, které překračuje 10 minut, při předpokladu režijní rezervy 1 minuty pro zjišťování a převzetí služeb při selhání. Měli byste okamžitě prozkoumat problémy s výkonem na příslušné instanci serveru.

      • Text k zobrazení: RTO bylo překročeno!

  8. Pomocí následujících specifikací vytvořte druhou zásadu správy založenou na zásadách .

    • stránka Obecné:

      • Název: CustomAvailabilityDatabaseRPO

      • Zkontroluj podmínku: RPO

      • proti cílům: Every DatabaseReplicaState v IsPrimaryReplica AvailabilityGroup

      • režim vyhodnocení: Podle plánu

      • Plán: CollectorSchedule_Every_30min

      • Povoleno: vybrané

    • Popis stránky

      • kategorie: upozornění databáze dostupnosti

      • Popis: Databáze dostupnosti překročila váš cíl bodu obnovení (RPO), který je 1 hodina. Měli byste okamžitě analyzovat problémy s výkonem na replikách dostupnosti.

      • Text k zobrazení: RPO byl překročen!

Po dokončení se vytvoří dvě nové úlohy agenta SQL Serveru, jednu pro každý plán vyhodnocení zásad. Tyto úlohy by měly mít názvy, které začínají na syspolicy_check_schedule.

Historii úloh můžete zobrazit a zkontrolovat výsledky vyhodnocení. Chyby vyhodnocení se zaznamenávají také v protokolu aplikací systému Windows (v Prohlížeči událostí) s ID události 34052. Agenta SQL Serveru můžete také nakonfigurovat tak, aby odesílala upozornění na selhání zásad. Další informace najdete v tématu Konfigurace výstrah, které správcům zásad oznámí selhání zásad.

Scénáře řešení potíží s výkonem

Následující tabulka uvádí běžné scénáře řešení potíží souvisejících s výkonem.

Scénář Popis
Řešení potíží: Skupina dostupnosti překročila RTO Po automatickém převzetí služeb nebo plánovaném ručním převzetí bez ztráty dat přesahuje doba převzetí váš RTO. Nebo když odhadnete dobu převzetí služeb při selhání sekundární repliky se synchronním potvrzením (například partnera s automatickým převzetím služeb při selhání), zjistíte, že překračuje vaše RTO.
Řešení potíží: Skupina dostupnosti překročila cílovou hodnotu pro bod obnovy Po provedení vynuceného ručního přepnutí při selhání je ztráta dat větší než vaše plánovaná hodnota RPO. Nebo když při výpočtu potenciální ztráty dat sekundární repliky asynchronního potvrzení zjistíte, že překračuje váš cíl bodu obnovení (RPO).
Řešení potíží: Změny v primární replice se neprojeví na sekundární replice Klientská aplikace úspěšně dokončí aktualizaci primární repliky, ale dotazování sekundární repliky ukazuje, že se změna neprojeví.

Užitečné rozšířené události

Následující rozšířené události jsou užitečné při odstraňování potíží s replikami ve stavu synchronizující.

Název události Kategorie Kanál Replika dostupnosti
zopakovat_dohnáno transakce Ladění Sekundární
opětovný_vstup_pracovníka transakce Ladění Sekundární
hadr_transport_dump_message alwayson Ladicí Primární
hadr_worker_pool_task alwayson Ladění Primární
hadr_primární_průběh_výpisu alwayson Ladění Primární
hadr_dump_log_progress alwayson Ladění Primární
hadr_undo_of_redo_log_scan alwayson Analytický Sekundární