Sdílet prostřednictvím


Kontrolní body databáze (SQL Server)

platí pro:SQL Serverazure SQL Database

Kontrolní bod vytvoří známý dobrý bod, ze kterého může databázový stroj SQL Serveru začít používat změny obsažené v protokolu během obnovení po neočekávaném vypnutí nebo chybovém ukončení.

Přehled

Z důvodů výkonu databázový stroj provádí změny databázových stránek v paměti, v mezipaměti vyrovnávací paměti a po každé změně tyto stránky nezapisuje na disk. Databázový stroj místo toho pravidelně vydává kontrolní bod pro každou databázi. Kontrolní bod zapíše aktuální změněné stránky v paměti ( označované jako špinavé stránky) a informace protokolu transakcí z paměti na disk a také zaznamenává informace v transakčním protokolu.

Databázový stroj podporuje několik typů kontrolních bodů: automatické, nepřímé, ruční a interní. Následující tabulka shrnuje typy kontrolních bodů.

Název rozhraní Transact-SQL Description
Automatický EXEC sp_configure 'interval obnovení', 'seconds' Vydáno automaticky na pozadí, aby se splnil horní časový limit doporučený konfigurací serveru pro možnost intervalu obnovení. Automatické kontrolní body se dokončí. Automatické kontrolní body jsou omezené na základě počtu nevyřízených zápisů a toho, jestli databázový stroj zjistí zvýšení latence zápisu nad 50 milisekund.

Další informace naleznete v tématu Konfigurace možností serveru pro interval obnovení.
Nepřímé ALTER DATABASE ... SET TARGET_RECOVERY_TIME = target_recovery_time { SECONDS | MINUTES } Vydáno na pozadí pro splnění doby obnovení určené uživatelem pro danou databázi. Počínaje SQL Serverem 2016 (13.x) je výchozí hodnota 1 minuta. Výchozí hodnota je 0 pro starší verze, což značí, že databáze bude používat automatické kontrolní body, jejichž frekvence závisí na nastavení intervalu obnovení instance serveru.

Další informace naleznete v tématu Změna cílové doby obnovení databáze (SQL Server).
Příručka CHECKPOINT [ checkpoint_duration ] Vydáno při spuštění příkazu Transact-SQL CHECKPOINT. Ruční kontrolní bod se provádí v aktuální databázi v rámci vašeho připojení. Ve výchozím nastavení se ruční kontrolní body dokončí samy. Omezování funguje stejně jako u automatických kontrolních bodů. Volitelně parametr checkpoint_duration určuje požadovanou dobu v sekundách, než se kontrolní bod dokončí.

Další informace naleznete v tématu CHECKPOINT (Transact-SQL).
interní None Provedené různými operacemi serveru, jako je zálohování a vytvoření snímku databáze, aby bylo zajištěno, že obrazy disku odpovídají aktuálnímu stavu protokolu.

Možnost -k rozšířeného nastavení SQL Serveru umožňuje správci databáze omezovat chování vstupně-výstupních operací kontrolních bodů na základě propustnosti subsystému vstupně-výstupních operací u některých typů kontrolních bodů. Možnost -k nastavení se vztahuje na automatické kontrolní body a všechny jinak neomezené ruční a interní kontrolní body.

U automatických, ručních a interních kontrolních bodů je potřeba během obnovení databáze vrátit zpět pouze změny provedené po nejnovějším kontrolním bodu. Tím se zkracuje doba potřebná k obnovení databáze.

Důležité

Dlouhotrvající, nepotvrzené transakce zvyšují dobu obnovení pro všechny typy kontrolních bodů.

Interakce možností TARGET_RECOVERY_TIME a intervalu obnovení

Následující tabulka shrnuje interakci mezi nastavením pro celý sp_configure 'recovery interval' server a nastavením pro konkrétní ALTER DATABASE ... TARGET_RECOVERY_TIME databázi.

CÍLOVÝ ČAS OBNOVENÍ Interval obnovení Typ použitého kontrolního bodu
0 0 automatické kontrolní body, jejichž cílový interval obnovení je 1 minuta.
0 > 0 Automatické kontrolní body, jejichž cílový interval obnovení je určen uživatelem definovaným nastavením sp_configure 'recovery interval' možnosti.
> 0 Není relevantní Nepřímé kontrolní body, jejichž cílový čas obnovení je určen nastavením TARGET_RECOVERY_TIME vyjádřeným v sekundách.

Automatické kontrolní body

K automatickému kontrolnímu bodu dochází pokaždé, když počet záznamů protokolu dosáhne čísla, které databázová databáze odhadne, že může zpracovat během doby určené v serverové konfigurační možnosti intervalu obnovení. Další informace naleznete v tématu Konfigurace možnosti konfigurace serveru pro interval obnovení.

V každé databázi bez uživatelem definovaného cílového času obnovení generuje databázový stroj automatické kontrolní body. Frekvence závisí na možnosti rozšířené konfigurace serveru v intervalu obnovení , který určuje maximální dobu, kterou má daná instance serveru použít k obnovení databáze během restartování systému. Databázový stroj odhaduje maximální počet záznamů protokolu, které může zpracovat v intervalu obnovení. Když databáze používající automatické kontrolní body dosáhne tohoto maximálního počtu záznamů protokolu, databázový stroj vydá kontrolní bod v databázi.

Časový interval mezi automatickými kontrolními body může být vysoce proměnný. Databáze se značným zatížením transakcí bude mít častější kontrolní body než databáze používaná především pro operace jen pro čtení. V rámci jednoduchého modelu obnovení se do fronty zařadí také automatický kontrolní bod, pokud se log soubor zaplní na 70 %.

V rámci jednoduchého modelu obnovení, pokud některý faktor nezpozdí zkrácení protokolu, automatický kontrolní bod zkrátí nepoužívaný oddíl transakčního protokolu. Naproti tomu, u plných a hromadně protokolovaných modelů obnovení, jakmile je vytvořen řetězec záloh protokolů, automatické kontrolní body nezpůsobí zkrácení protokolu. Další informace naleznete v tématu Transakční protokol (SQL Server).

Po chybovém ukončení systému závisí doba potřebná k obnovení dané databáze z velké části na množství náhodných vstupně-výstupních operací potřebných k opakování stránek, které byly v době chybového ukončení zašpiněné. To znamená, že nastavení intervalu obnovení je nespolehlivé. Nemůže určit přesnou dobu trvání obnovení. Kromě toho, když probíhá automatický kontrolní bod, obecná vstupně-výstupní aktivita pro data se výrazně a nepředvídatelně zvyšuje.

Vliv intervalu obnovení na výkon obnovení

Pro systém online zpracování transakcí (OLTP) pomocí krátkých transakcí je interval obnovení primárním faktorem určujícím dobu obnovení. Možnost interval obnovení ale nemá vliv na dobu potřebnou k zrušení dlouhotrvající transakce. Obnovení databáze s dlouhotrvající transakcí může trvat mnohem déle, než je čas zadaný v nastavení intervalu obnovení .

Pokud například dlouhotrvající transakce trvala dvě hodiny, než byla instance serveru deaktivována, skutečné obnovení trvá výrazně déle než hodnota intervalu obnovení potřebného k obnovení dlouhé transakce. Další informace o dopadu dlouhotrvající transakce na dobu obnovení naleznete v tématu Transakční protokol (SQL Server). Další informace o procesu obnovení naleznete v tématu Přehled obnovení a obnovení (SQL Server).

Výchozí hodnoty obvykle poskytují optimální výkon obnovení. Změna intervalu obnovení ale může zvýšit výkon za následujících okolností:

  • Pokud dokončení obnovy rutinně trvá výrazně déle než 1 minutu v případech, kdy se dlouhotrvající transakce nevracejí zpět.

  • Pokud si všimnete, že časté kontrolní body mají negativní vliv na výkon databáze.

Pokud se rozhodnete zvýšit nastavení intervalu obnovení , doporučujeme ho postupně zvýšit o malé přírůstky a vyhodnotit účinek každého přírůstkového zvýšení výkonu obnovení. Tento přístup je důležitý, protože s rostoucím nastavením intervalu obnovení trvá obnovení databáze tolikrát déle. Pokud například změníte interval obnovení na 10 minut, trvá obnovení přibližně 10krát déle, než když je interval obnovení nastavený na 1 minutu.

Nepřímé kontrolní body

Nepřímé kontrolní body zavedené v SQL Serveru 2012 (11.x) poskytují konfigurovatelnou alternativu k automatickým kontrolním bodům na úrovni databáze. To lze nakonfigurovat zadáním možnosti konfigurace cílové doby obnovení databáze. Další informace naleznete v tématu Změna cílové doby obnovení databáze (SQL Server). V případě chybového ukončení systému poskytují nepřímé kontrolní body potenciálně rychlejší a předvídatelnější dobu obnovení než automatické kontrolní body.

Nepřímé kontrolní body nabízejí následující výhody:

  • Nepřímé kontrolní body zajišťují, že počet nezašpiněných stránek je nižší než určitá prahová hodnota, aby se obnovení databáze dokončilo v cílové době obnovení.

    Možnost konfigurace intervalu obnovení používá počet transakcí k určení doby obnovení, na rozdíl od nepřímých kontrolních bodů , které využívají počet nezašpiněných stránek. Pokud jsou u databáze, která přijímá velké množství operací DML, povolené nepřímé kontrolní body, může zapisovač na pozadí začít agresivně zapisovat špinavé vyrovnávací paměti na disk, aby se zajistilo, že doba potřebná k obnovení je v rámci cílové doby obnovy stanovené databází. To může způsobit další vstupně-výstupní aktivitu v určitých systémech, což může přispět k kritickému bodu výkonu, pokud diskový subsystém pracuje nad prahovou hodnotou vstupně-výstupních operací nebo blíží se k jeho překročení.

  • Nepřímé kontrolní body umožňují spolehlivě řídit dobu obnovení databáze pomocí faktoru nákladů na náhodné vstupně-výstupní operace během operace REDO. To umožňuje, aby instance serveru zůstala v rámci horního limitu doby obnovení pro danou databázi (s výjimkou případů, kdy dlouhotrvající transakce způsobuje nadměrné doby vrácení zpět).

  • Nepřímé kontrolní body snižují vstupně-výstupní operace související s kontrolními body tím, že neustále zapisují špinavé stránky na disk na pozadí.

U online transakční úlohy v databázi nakonfigurované pro nepřímé kontrolní body ale může dojít ke snížení výkonu. Důvodem je to, že zapisovač pozadí používaný nepřímým kontrolním bodem někdy zvyšuje celkové zatížení zápisu pro instanci serveru.

Důležité

Nepřímý kontrolní bod je výchozím chováním nových databází vytvořených v SQL Serveru 2016 (13.x), včetně databází model a tempdb.

Databáze, které byly upgradovány na místě nebo obnoveny z předchozí verze SQL Serveru, budou používat předchozí automatické chování kontrolních bodů, pokud explicitně nezmění použití nepřímého kontrolního bodu.

Vylepšená škálovatelnost nepřímých kontrolních bodů

Před SQL Serverem 2019 (15.x) může docházet k neodpovídajícím chybám plánovače, pokud existuje databáze, která generuje velký počet špinavých stránek, například tempdb. SQL Server 2019 (15.x) zavádí vylepšenou škálovatelnost nepřímých kontrolních bodů, což by mělo pomoct vyhnout se těmto chybám u databází s velkým UPDATE/INSERT zatížením.

Interní kontrolní body

Interní kontrolní body jsou generovány různými součástmi serveru, aby se zajistilo, že image disků odpovídají aktuálnímu stavu protokolu. Interní kontrolní body se generují v reakci na následující události:

  • Soubory databáze byly přidány nebo odebrány pomocí alter DATABASE.

  • Provede se záloha databáze.

  • Vytvoří se snímek databáze, ať už explicitně nebo interně pro DBCC CHECKDB.

  • Provede se aktivita vyžadující vypnutí databáze. Například AUTO_CLOSE je zapnuté a poslední připojení uživatele k databázi je zavřené nebo se provede změna možnosti databáze, která vyžaduje restartování databáze.

  • Instance SQL Serveru je zastavena zastavením služby SQL Server (MSSQLSERVER). Tato akce způsobí kontrolní bod v každé databázi v instanci SQL Serveru.

  • Přivedení instance clusteru pro převzetí služeb při selhání SQL Serveru (FCI) do režimu offline.

Další kroky

Viz také