Perché la mia istanza di RDS per SQL Server è bloccata nello stato di riavvio?

4 minuti di lettura
0

Perché il riavvio della mia istanza Amazon Relational Database Service (Amazon RDS) per Microsoft SQL Server richiede molto tempo?

Breve descrizione

Il riavvio dell'istanza DB potrebbe richiedere più tempo del previsto se su di essa è in corso un numero elevato di transazioni. Oppure, il riavvio potrebbe sembrare bloccato se nell'istanza è presente un numero elevato di file di registro virtuali (Virtual Log Files, VLF) che rallentano il riavvio.

Per risolvere questi problemi, effettua una delle seguenti operazioni o entrambe:

  • Verifica la presenza di query in corso sull'istanza DB.
  • Riduci il numero di VLF sull'istanza DB.

Risoluzione

Verifica la presenza di query in corso sull'istanza DB

Il riavvio interrompe tutte le transazioni in corso e SQL Server esegue il ripristino all'avvio dell'istanza. SQL Server esegue il rollforward e il rollback delle transazioni per portare il database a uno stato coerente.

È possibile visualizzare il tempo impiegato da questo processo di ripristino nel registro degli errori di SQL Server. La voce di registro include il tempo impiegato in ogni fase di ripristino. Nel seguente esempio di voce di registro, X è il tempo impiegato da SQL Server in ogni fase e nel ripristino completo. Se hai transazioni in corso di grandi dimensioni, il riavvio potrebbe richiedere molto tempo.

Recovery completed for database <<DB_NAME>> (database ID <<id of database>>) in X second(s) (analysis X ms, redo X ms, undo X ms [system undo X ms, regular undo X ms].) This is an informational message only. No user action is required.

Per risolvere questo problema, riduci il numero di query in corso. Usa il seguente comando per verificare se ci sono transazioni attive di modifica dei dati sul database.

SELECT r.session_id,
       r.start_time,
       r.status,
       r.cpu_time,
       r.total_elapsed_time,
       st.TEXT AS batch_text
FROM sys.dm_exec_requests AS r
     CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS st
     CROSS APPLY sys.dm_exec_query_plan(r.plan_handle) AS qp
     where session_id <> @@SPID
ORDER BY cpu_time DESC;

L'output del comando fornisce informazioni sulle sessioni in esecuzione sul database, insieme all'ora di inizio e al testo SQL. Se ci sono query ancora in esecuzione, attendi che vengano completate prima di eseguire un riavvio.

Riduci il numero di VLF sull'istanza DB

Il riavvio potrebbe richiedere molto tempo a causa dell'elevato numero di VLF sull'istanza. Un numero eccessivo di VLF potrebbe accumularsi da un registro delle transazioni inizialmente piccolo che è stato ampliato (manualmente o automaticamente) con incrementi molto piccoli.

Prima di iniziare le fasi di ripristino durante il riavvio, SQL Server esegue una scansione seriale di tutti i VLF. Questa fase è chiamata fase di rilevamento. Se viene rilevato un numero elevato di VLF, nel registro degli errori viene visualizzata la seguente notifica:

Database %ls has more than %d virtual log files which is excessive. Too many virtual log files can cause long startup and backup times. Consider shrinking the log and using a different growth increment to reduce the number of virtual log files.

Per ridurre il numero di VLF, procedi come segue:

Nota: è consigliabile eseguire questi passaggi durante gli orari nei quali si registra un basso carico di lavoro e negli orari non lavorativi.

  1. Accedi all'istanza di RDS per SQL Server da Microsoft SQL Server Management Studio come utente master.
  2. Esegui la query DBCC SQLPERF (LOGSPACE) per controllare l'utilizzo del file di registro.
  3. Riduci il file di registro del database per il quale è stata ricevuta la notifica sul numero elevato di VLF nel registro degli errori.
  4. Espandi il file di registro delle transazioni a una dimensione di utilizzo appropriata tutto in una volta. In questo modo si evita la crescita automatica che causa un numero elevato di VLF.

Nota: la riduzione del file di registro riduce il numero di VLF. L'esecuzione di un'espansione una tantum crea un numero limitato di VLF richiesti in base ai criteri di creazione del VLF. Per ulteriori informazioni, consulta Virtual Log Files (VLF) (File di registro virtuali) nella documentazione di Microsoft SQL.


Informazioni correlate

How can I troubleshoot storage consumption in my Amazon RDS DB instance that is running SQL Server? (Come posso risolvere il consumo di memoria nella mia istanza database di Amazon RDS che esegue SQL Server?)