Pourquoi mon instance RDS pour SQL Server est-elle bloquée en état de redémarrage ?

Lecture de 4 minute(s)
0

Pourquoi le redémarrage de mon instance Amazon Relational Database Service (Amazon RDS) pour Microsoft SQL Server prend-il beaucoup de temps ?

Brève description

Le redémarrage de votre instance de base de données peut prendre plus de temps que prévu s'il existe un grand nombre de transactions en cours sur l'instance. Ou bien, le redémarrage peut sembler bloqué s'il existe un grand nombre de fichiers journaux virtuels (VLF) sur l'instance qui ralentissent le redémarrage.

Pour résoudre ces problèmes, effectuez l'une des opérations suivantes ou les deux :

  • Vérifiez les requêtes en cours sur l'instance de base de données.
  • Réduisez le nombre de VLF sur l'instance de base de données.

Résolution

Vérifiez les requêtes en cours sur l'instance de base de données

Le redémarrage arrête toutes les transactions en cours et SQL Server exécute la restauration lors du démarrage de l'instance. SQL Server effectue un rollforward et un rollback des transactions pour amener la base de données à un état cohérent.

Vous pouvez voir le temps nécessaire à ce processus de restauration dans le journal des erreurs de SQL Server. L'entrée du journal inclut le temps passé lors de chaque phase de restauration. Dans l'exemple d'entrée de journal suivant, X est le temps nécessaire à SQL Server dans chaque phase et lors de la restauration complète. Si vous avez des transactions importantes en cours, le redémarrage peut prendre du temps.

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.

Pour résoudre ce problème, réduisez le nombre de requêtes en cours. Utilisez la commande suivante pour vérifier si des transactions de modification de données sont actives sur la base de données.

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;

La sortie de la commande fournit des informations sur les sessions exécutées sur votre base de données, ainsi que l'heure de début et le texte SQL. Si des requêtes sont toujours en cours d'exécution, autorisez-les à se terminer avant d'effectuer un redémarrage.

Réduire le nombre de VLF sur l'instance de base de données

Le redémarrage peut prendre du temps en raison du nombre élevé de VLF sur l'instance. Un nombre excessif de fichiers VLF peut s'accumuler à partir d'un journal de transactions initialement petit qui a été développé (manuellement ou automatiquement) par très petits incréments.

Avant de démarrer les phases de restauration lors du redémarrage, SQL Server analyse toutes les VLF en série. Cette phase est appelée phase de découverte. Si un grand nombre de VLF sont détectés, la notification suivante apparaît dans le journal des erreurs :

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.

Pour réduire le nombre de VLF, procédez comme suit :

Remarque : Il est recommandé d'effectuer ces étapes pendant les heures creuses ou en dehors des heures de bureau.

  1. Connectez-vous à l'instance RDS pour SQL Server depuis Microsoft SQL Server Management Studio en tant qu'utilisateur principal.
  2. Exécutez la requête DBCC SQLPERF (LOGSPACE) pour vérifier l'utilisation du fichier journal.
  3. Réduisez le fichier journal de la base de données qui a reçu la notification de VLFS élevés dans le journal des erreurs.
  4. Développez le fichier journal des transactions à la taille d'utilisation appropriée en une seule fois. Cela évite une croissance automatique qui provoque un nombre élevé de VLF.

Remarque : La réduction du fichier journal réduit le nombre de fichiers VLF. L'exécution d'une extension unique crée un nombre limité de VLF requis selon les critères de création des VLF. Pour plus d'informations, consultez la section Fichiers journaux virtuels (VLF) dans les documents Microsoft SQL.


Informations connexes

Comment résoudre des problèmes de consommation d'espace de stockage dans mon instance de base de données Amazon RDS DB qui exécute SQL Server ?