Udostępnij za pośrednictwem


Zarządzanie przyspieszonym odzyskiwaniem bazy danych

Dotyczy: SQL Server 2019 (15.x) i nowsze wersje

W tym artykule pokazano, jak włączyć i wyłączyć przyspieszone odzyskiwanie bazy danych (ADR) za pomocą Transact-SQL (T-SQL) w systemie SQL Server 2019 (15.x) i nowszych wersjach, a także jak zmienić grupę plików magazynu wersji trwałych (PVS) używaną przez ADR.

Notatka

W Azure SQL Database, Azure SQL Managed Instance oraz SQL Database w Microsoft Fabric przyspieszone odzyskiwanie bazy danych (ADR) jest zawsze włączone. Jeśli zaobserwujesz problemy, takie jak wysokie użycie pamięci masowej przez PVS lub powolne czyszczenie ADR, zobacz Rozwiązywanie problemów z przyspieszonym odzyskiwaniem bazy danych lub skontaktuj się z pomocą techniczną Azure .

Kto powinien rozważyć przyspieszone odzyskiwanie bazy danych

Wielu klientów uważa, że przyspieszone odzyskiwanie bazy danych (ADR) jest cenną technologią w celu poprawy czasu odzyskiwania bazy danych.

Jeśli obciążenia bazy danych często napotykają następujące scenariusze, możesz skorzystać z reguły ADR:

  • Długotrwałe transakcje, których nie można uniknąć. Na przykład w przypadkach, gdy długotrwałe transakcje są zagrożone wycofaniem, ADR może pomóc.
  • Aktywne transakcje, które powodują znaczny wzrost dziennika transakcji.
  • Długotrwałe odzyskiwanie bazy danych, które ma wpływ na dostępność bazy danych (na przykład po nieoczekiwanym ponownym uruchomieniu programu SQL Server lub ręcznym wycofaniu transakcji).

Reguły ADR nie są zalecane w następujących scenariuszach:

  • Bazy danych korzystające z dublowania baz danych nie są obsługiwane.
  • Jeśli aplikacja używa dużej liczby modyfikacji pojedynczych wierszy w poszczególnych transakcjach, obciążenie może nie być optymalne dla ADR. Rozważ przetwarzanie zbiorcze modyfikacji w instrukcjach wielowierszowych, jeśli to możliwe, i unikaj dużej liczby małych transakcji DML.

Włącz ADR

Reguła ADR jest domyślnie wyłączona i dostępna od programu SQL Server 2019 (15.x).

Aby włączyć reguły ADR, użyj następującego polecenia Transact-SQL (T-SQL):

ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON;

Aby włączyć lub wyłączyć regułę ADR, należy włączyć lub wyłączyć wyłączną blokadę bazy danych. Oznacza to, że polecenie ALTER DATABASE jest blokowane do momentu zakończenia wszystkich aktywnych sesji i że wszystkie nowe sesje czekają za poleceniem ALTER DATABASE. Jeśli ważne jest ukończenie operacji i usunięcie blokady, możesz użyć klauzuli zakończenia, WITH ROLLBACK [IMMEDIATE | AFTER {number} SECONDS | NO_WAIT] przerwać wszystkie aktywne sesje w bazie danych. Aby uzyskać więcej informacji, zobacz ALTER DATABASE USTAW opcje.

Wyłącz ADR

Aby wyłączyć reguły ADR, użyj następującego polecenia T-SQL:

ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = OFF;
GO

Nawet po wyłączeniu reguły ADR mogą istnieć wersje przechowywane w usłudze PVS, których system nadal potrzebuje do przywracania logicznego do momentu zakończenia wszystkich aktywnych transakcji.

Zmienianie grupy plików PVS

Domyślnie dane magazynu wersji trwałej (PVS) są przechowywane w grupie plików PRIMARY. W razie potrzeby można przenieść pvS do innej grupy plików. Może to na przykład wymagać więcej miejsca lub szybszej pamięci.

Aby zmienić lokalizację serwera PVS na inną grupę plików, wykonaj następujące kroki:

  1. Utwórz grupę plików dla pvS i dodaj co najmniej jeden plik danych do tej grupy plików. Na przykład:

    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];
    
  2. Wyłącz regułę ADR za pomocą następującego polecenia języka T-SQL:

    ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = OFF;
    GO
    
  3. Poczekaj na usunięcie wszystkich wersji przechowywanych w trybie PVS.

    Aby włączyć ADR przy użyciu nowej lokalizacji PVS, najpierw upewnij się, że wszystkie informacje o wersji zostały usunięte z poprzedniej lokalizacji PVS. Można wymusić czyszczenie za pomocą procedury składowanej sys.sp_persistent_version_cleanup.

    EXEC sys.sp_persistent_version_cleanup [<db_name>];
    

    Procedura składowana sys.sp_persistent_version_cleanup jest synchroniczna, co oznacza, że nie zostanie ukończona, dopóki wszystkie informacje o wersji nie zostaną wyczyszczone z bieżącego serwera PVS. Po zakończeniu można sprawdzić, czy informacje o wersji zostały usunięte, wykonując zapytanie sys.dm_tran_persistent_version_store_stats i sprawdzając wartość persistent_version_store_size_kb, przykładowo jak w następującym przykładzie.

    SELECT DB_NAME(database_id),
           persistent_version_store_size_kb
    FROM sys.dm_tran_persistent_version_store_stats
    WHERE database_id = [MyDatabaseID];
    

    Gdy wartość persistent_version_store_size_kb wynosi 0, możesz ponownie włączyć funkcję ADR z PVS w nowej grupie plików.

  4. Włącz reguły ADR i określ nową lokalizację PVS za pomocą następującego polecenia języka T-SQL:

    ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON
    (PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG]);
    

Monitoruj rozmiar PVS

Po włączeniu funkcji ADR w bazie danych monitoruj rozmiar stałego magazynu wersji (PVS) oraz efektywność procesu oczyszczania PVS. Stan PVS można monitorować przy użyciu metod opisanych w Rozwiązywanie problemów z przyspieszonym odzyskiwaniem bazy danych.

Jeśli masz obciążenie z dużą liczbą instrukcji DML (INSERT, UPDATE, DELETE, MERGE), takich jak OLTP o dużym wolumenie, może to wymagać okresu regeneracji, aby proces oczyszczania PVS odzyskał miejsce. Zazwyczaj cykle operacji biznesowych pozwalają na ten czas, ale w niektórych scenariuszach można ręcznie zainicjować proces oczyszczania PVS, aby skorzystać z wzorców działań aplikacji.

  • Aby ręcznie aktywować proces oczyszczania PVS pomiędzy zadaniami lub podczas okien konserwacyjnych, użyj procedury składowanej sys.sp_persistent_version_cleanup.

  • Jeśli proces oczyszczania PVS działa przez długi czas, może się okazać, że liczba przerwanych transakcji rośnie, co powoduje również zwiększenie rozmiaru PVS. Użyj sys.dm_tran_aborted_transactions DMV, aby zgłosić liczbę przerwanych transakcji i użyj sys.dm_tran_persistent_version_store_stats, aby zgłosić czasy rozpoczęcia/zakończenia oczyszczania wraz z rozmiarem PVS.

  • Obciążenia z długotrwałymi zapytaniami używającymi izolacji SNAPSHOT lub izolacji READ COMMITTED, gdy włączona jest opcja bazy danych READ_COMMITTED_SNAPSHOT (RCSI), mogą opóźniać czyszczenie PVS dla wszystkich baz danych w instancji aparatu bazy danych, co prowadzi do wzrostu rozmiaru PVS. Aby uzyskać więcej informacji, zobacz sekcję dotyczącą długich aktywnych skanów migawek w Rozwiązywanie problemów z przyspieszonym odzyskiwaniem bazy danych.