Gestire il ripristino accelerato del database
si applica a: SQL Server 2019 (15.x) e versioni successive
Questo articolo illustra come abilitare e disabilitare il ripristino accelerato del database (ADR) con Transact-SQL (T-SQL) in SQL Server 2019 (15.x) e versioni successive, nonché come modificare il filegroup usato dall'archivio versioni permanente (PVS) da ADR.
Nota
Nel database SQL di Azure, nell'Istanza SQL gestita di Azure e nel database SQL in Microsoft Fabric, il ripristino accelerato del database (ADR) è sempre abilitato. Se si osservano problemi, ad esempio l'utilizzo elevato dello spazio di archiviazione da parte di PVS o la pulizia lenta di AdR, vedere Risolvere i problemi relativi al ripristino accelerato del database o contattare supporto di Azure.
Utenti che possono trarre vantaggio dal ripristino accelerato del database
Molti clienti considerano il ripristino accelerato del database (ADR) una tecnologia preziosa per migliorare il tempo di ripristino del database.
Se i carichi di lavoro del database riscontrano spesso gli scenari seguenti, è possibile trarre vantaggio da ADR:
- Transazioni a esecuzione prolungata che non possono essere evitate. Ad esempio, nei casi in cui le transazioni a esecuzione prolungata sono a rischio di essere sottoposte a rollback, è possibile eseguire il rollback di ripristino accelerato del database.
- Transazioni attive che causano un aumento significativo del log delle transazioni.
- Ripristino di un database a esecuzione prolungata che influisce sulla disponibilità del database, ad esempio dopo un riavvio imprevisto di SQL Server o un rollback manuale delle transazioni.
AdR non è consigliato per gli scenari seguenti:
- I database che usano il mirroring del database non sono supportati.
- Se l'applicazione usa un volume elevato di modifiche a riga singola nelle singole transazioni, il carico di lavoro potrebbe non essere ottimale per ADR. Prendere in considerazione l'invio in batch di modifiche nelle istruzioni su più righe, laddove possibile, ed evitare un volume elevato di transazioni DML di piccole dimensioni.
Abilitare ADR
AdR è disattivato per impostazione predefinita ed è disponibile a partire da SQL Server 2019 (15.x).
Usare il comando Transact-SQL (T-SQL) seguente per abilitare ADR:
ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON;
È necessario un blocco esclusivo del database per abilitare o disabilitare ADR. Ciò significa che il comando ALTER DATABASE
viene bloccato fino a quando tutte le sessioni attive non sono più presenti e che tutte le nuove sessioni attendono dietro il comando ALTER DATABASE
. Se è importante completare l'operazione e rimuovere il blocco, è possibile usare la clausola di terminazione WITH ROLLBACK [IMMEDIATE | AFTER {number} SECONDS | NO_WAIT]
per interrompere le sessioni attive nel database. Per altre informazioni, vedere opzioni ALTER DATABASE SET.
Disabilitare ADR
Usare il comando T-SQL seguente per disabilitare ADR:
ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = OFF;
GO
Anche dopo la disabilitazione di ADR, potrebbero essere presenti versioni archiviate in PVS che il sistema deve ancora ripristinare logicamente fino al completamento di tutte le transazioni attive.
Cambia il gruppo di file PVS
Per impostazione predefinita, i dati dell'archivio versioni permanenti (PVS) si trova nel filegroup PRIMARY
. Se necessario, è possibile spostare il file PVS in un filegroup diverso. Ad esempio, potrebbe richiedere più spazio o un'archiviazione più veloce.
Per modificare il percorso del file pvS in un filegroup diverso, seguire questa procedura:
Creare il filegroup per PVS e aggiungere almeno un file di dati a questo filegroup. Ad esempio:
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];
Disabilitare ADR con il comando T-SQL seguente:
ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = OFF; GO
Attendere che tutte le versioni archiviate in PVS vengano rimosse.
Per abilitare ADR usando una nuova ubicazione PVS, assicurarsi innanzitutto che tutte le informazioni sulla versione siano state eliminate dall'ubicazione PVS precedente. È possibile forzare la pulizia con la stored procedure sys.sp_persistent_version_cleanup:
EXEC sys.sp_persistent_version_cleanup [<db_name>];
La stored procedure
sys.sp_persistent_version_cleanup
è sincrona, il che significa che non si completerà fino a quando tutte le informazioni sulla versione non saranno state eliminate dall'attuale PVS. Al termine, è possibile verificare che le informazioni sulla versione vengano rimosse eseguendo una query sys.dm_tran_persistent_version_store_stats ed esaminando il valore dipersistent_version_store_size_kb
, come nell'esempio seguente:SELECT DB_NAME(database_id), persistent_version_store_size_kb FROM sys.dm_tran_persistent_version_store_stats WHERE database_id = [MyDatabaseID];
Quando il valore di
persistent_version_store_size_kb
è0
, è possibile riabilitare la funzionalità ADR con il PVS nel nuovo filegroup.Abilitare ADR e specificare il nuovo percorso PVS con il comando T-SQL seguente:
ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON (PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG]);
Monitorare le dimensioni del PVS
Una volta abilitato ADR su un database, monitorare la dimensione dell'archivio delle versioni permanenti (PVS) e delle prestazioni di pulizia del PVS. È possibile monitorare l'integrità di PVS usando i metodi disponibili in Risoluzione dei problemi di ripristino accelerato del database.
Se si dispone di un carico di lavoro con un volume elevato di istruzioni DML (INSERT
, UPDATE
, DELETE
, MERGE
), come un sistema OLTP ad alto volume, potrebbe essere necessario un periodo di pausa/ripristino affinché il processo di pulizia PVS possa recuperare spazio libero. In genere, i cicli operativi aziendali consentono questo periodo di tempo, ma in alcuni scenari si potrebbe voler avviare manualmente il processo di pulizia PVS per sfruttare i modelli di attività dell'applicazione.
Per attivare manualmente il processo di pulizia PVS tra carichi di lavoro o durante le finestre di manutenzione, usare la procedura memorizzata sys.sp_persistent_version_cleanup.
Se il processo di pulizia PVS è in esecuzione per un lungo periodo di tempo, potresti notare che il conteggio delle transazioni interrotte aumenta, il che provoca anche un aumento delle dimensioni del PVS. Usare la DMV sys.dm_tran_aborted_transactions per segnalare il numero di transazioni interrotte e usare sys.dm_tran_persistent_version_store_stats per segnalare i tempi di inizio/fine della pulizia insieme alle dimensioni PVS.
I carichi di lavoro con query a esecuzione prolungata che utilizzano l'isolamento
SNAPSHOT
o l'isolamentoREAD COMMITTED
, quando l'opzione di databaseREAD_COMMITTED_SNAPSHOT
(RCSI) è abilitata, potrebbero ritardare la pulizia PVS per tutti i database in un'istanza del motore di database, aumentando le dimensioni del PVS. Per ulteriori informazioni, consultare la sezione sulle scansioni snapshot attive lunghe in Risolvere i problemi relativi al ripristino accelerato del database.