Správa zrychleného obnovení databáze
platí pro: SQL Server 2019 (15.x) a novější verze
V tomto článku se naučíte povolit a zakázat zrychlené obnovení databáze (ADR) s Transact-SQL (T-SQL) v SQL Serveru 2019 (15.x) a novějších verzích a jak změnit skupinu souborů trvalého úložiště verzí (PVS), kterou používá ADR.
Poznámka
Ve službě Azure SQL Database, Azure SQL Managed Instance a sql database v Microsoft Fabric je vždy povolené zrychlené obnovení databáze (ADR). Pokud zaznamenáte problémy, jako je vysoké využití úložiště pomocí PVS nebo pomalé vyčištění ADR, přečtěte si Řešení potíží s akcelerovaným obnovením databáze nebo se obraťte na podporu Azure.
Kdo by měl zvážit zrychlené obnovení databáze
Mnoho zákazníků najde akcelerované obnovení databáze (ADR) cennou technologii pro zlepšení doby obnovení databáze.
Pokud vaše databázové úlohy často narazí na následující scénáře, můžete využít ADR:
- Dlouhotrvající transakce, kterým se nelze vyhnout. Například v případech, kdy jsou dlouhotrvající transakce ohroženy vrácením zpět, může pomoct ADR.
- Aktivní transakce, které způsobují, že se transakční log výrazně zvětšuje.
- Dlouhotrvající obnovení databáze, které má vliv na dostupnost databáze (například po neočekávaném restartování SQL Serveru nebo vrácení ruční transakce zpět).
Alternativní řešení potíží se nedoporučuje pro následující scénáře:
- Databáze používající zrcadlení databáze nejsou podporovány.
- Pokud vaše aplikace používá velký objem úprav s jedním řádkem v jednotlivých transakcích, nemusí být vaše úloha pro ADR optimální. Pokud je to možné, zvažte dávkové úpravy v příkazech s více řádky a vyhněte se velkému objemu malých transakcí DML.
Povolit ADR
ADR je ve výchozím nastavení vypnuté a je k dispozici od SQL Serveru 2019 (15.x).
K povolení ADR použijte následující příkaz Transact-SQL (T-SQL):
ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON;
K povolení nebo zakázání ADR je nutný exkluzivní zámek databáze. To znamená, že příkaz ALTER DATABASE
je zablokovaný, dokud nebudou všechny aktivní relace pryč a že všechny nové relace čekají za příkazem ALTER DATABASE
. Pokud je důležité dokončit operaci a odebrat zámek, můžete pomocí klauzule ukončení WITH ROLLBACK [IMMEDIATE | AFTER {number} SECONDS | NO_WAIT]
přerušit všechny aktivní relace v databázi. Další informace naleznete v tématu MOŽNOSTI ALTER DATABASE SET.
Zakázání ADR
K zakázání ADR použijte následující příkaz T-SQL:
ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = OFF;
GO
I po zakázání ADR můžou existovat verze uložené v PVS, které systém stále potřebuje k logickému vrácení, dokud se všechny aktivní transakce dokončí.
Změna skupiny souborů PVS
Ve výchozím nastavení jsou data trvalého úložiště verzí (PVS) ve skupině souborů PRIMARY
. V případě potřeby můžete PVS přesunout do jiné skupiny souborů. Může například vyžadovat více místa nebo rychlejší úložiště.
Pokud chcete změnit umístění PVS na jinou skupinu souborů, postupujte takto:
Vytvořte skupinu souborů pro PVS a přidejte do této skupiny souborů alespoň jeden datový soubor. Například:
ALTER DATABASE [<db_name>] ADD FILEGROUP [VersionStoreFG]; GO ALTER DATABASE [<db_name>] ADD FILE ( NAME = N'VersionStoreFG', FILENAME = N'E:\DATA\VersionStore.ndf', SIZE = 8192 MB, FILEGROWTH = 64 MB ) TO FILEGROUP [VersionStoreFG];
Pomocí následujícího příkazu T-SQL zakažte ADR:
ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = OFF; GO
Počkejte, až se odeberou všechny verze uložené v PVS.
Pokud chcete povolit ADR pomocí nového umístění PVS, nejprve se ujistěte, že všechny informace o verzi byly odstraněny z předchozího umístění PVS. Můžete vynutit vyčištění pomocí uložené procedury sys.sp_persistent_version_cleanup.
EXEC sys.sp_persistent_version_cleanup [<db_name>];
Uložená procedura
sys.sp_persistent_version_cleanup
je synchronní, což znamená, že se nedokončí, dokud se všechny informace o verzi neodstraní z aktuálního PVS. Po dokončení operace můžete ověřit, že byly odstraněny informace o verzi, dotazováním na sys.dm_tran_persistent_version_store_stats a kontrolou hodnotypersistent_version_store_size_kb
, jak ukazuje následující příklad:SELECT DB_NAME(database_id), persistent_version_store_size_kb FROM sys.dm_tran_persistent_version_store_stats WHERE database_id = [MyDatabaseID];
Pokud je hodnota
persistent_version_store_size_kb
0
, můžete znovu povolit funkci ADR s PVS v nové skupině souborů.Povolte ADR a zadejte nové umístění PVS pomocí následujícího příkazu T-SQL:
ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON (PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG]);
Monitorování velikosti PVS
Po povolení ADR v databázi monitorujte velikost úložiště trvalých verzí (PVS) a výkon čištění PVS. Stav PVS můžete monitorovat pomocí metod nalezených v Řešení potíží s akcelerovaným obnovením databáze.
Pokud máte úlohu s vysokým počtem příkazů DML (INSERT
, UPDATE
, DELETE
, MERGE
), jako je OLTP s vysokým počtem transakcí, může být zapotřebí doba odpočinku/obnovení pro proces čištění PVS, aby se uvolnilo místo. Cykly obchodních operací obvykle umožňují tento čas, ale v některých scénářích můžete chtít proces čištění PVS zahájit ručně, abyste mohli využívat vzory aktivit aplikace.
Pokud chcete proces čištění PVS aktivovat ručně mezi úlohami nebo během údržby, použijte sys.sp_persistent_version_cleanup uloženou proceduru.
Pokud proces čištění PVS běží po dlouhou dobu, můžete zjistit, že počet přerušených transakcí roste, což také způsobí zvětšení velikosti PVS. Pomocí zobrazení dynamické správy sys.dm_tran_aborted_transactions nahlašte přerušený počet transakcí a pomocí sys.dm_tran_persistent_version_store_stats nahlašte počáteční a koncové časy čištění spolu s velikostí PVS.
Úlohy s dlouhotrvajícími dotazy, používajícími izolaci
SNAPSHOT
nebo izolaciREAD COMMITTED
, pokud je povolena volba databázeREAD_COMMITTED_SNAPSHOT
(RCSI), mohou zpozdit čištění PVS pro všechny databáze v instanci databázového stroje, což způsobí zvětšení PVS. Další informace najdete v části o dlouhých aktivních skenech snímků v Řešení potíží s akcelerovaným obnovením databáze.