web-dev-qa-db-fra.com

Comment maintenir au mieux la taille des fichiers journaux SQL

Je suis en quelque sorte un nouveau DBA et je gère une instance SQL Server 2012 qui a une bonne quantité d'activité. Je cours en mode de récupération complète, car nous avons besoin d'une récupération ponctuelle.

En ce moment, je prends une sauvegarde complète des bases de données et des journaux tous les jours à 5 heures du matin. Certains fichiers journaux ont gonflé jusqu'à 300 Go et même après avoir effectué une sauvegarde, leur taille ne diminue pas. Je peux les amener à réduire leur taille en exécutant quelque chose de similaire à:

BACKUP LOG db1 TO DISK = '\\server\share\db1_log1.trn';
DBCC ShrinkFile([db1_log], 0);

BACKUP LOG db1 TO DISK = '\\server\share\db1_log2.trn';
DBCC ShrinkFile([db1_log], 0);

BACKUP LOG db1 TO DISK = '\\server\share\db1_log3.trn';
DBCC ShrinkFile([db1_log], 0);

Lorsque je vérifie les LSN des fichiers de sauvegarde, je vois quelque chose comme:

RESTORE headeronly FROM DISK = N'\\server\share\db1_log1.trn'
FirstLSN:  15781000014686200001
SecondLSN: 15802000000665000001

RESTORE headeronly FROM DISK = N'\\server\share\db1_log2.trn'
FirstLSN:  15802000000665000001
SecondLSN: 15805000000004100001

RESTORE headeronly FROM DISK = N'\\server\share\db1_log3.trn'
FirstLSN:  15805000000004100001
SecondLSN: 15808000000004200001

Je ne crois pas que je casse ma chaîne de journaux en réduisant les fichiers journaux. En lisant cela, je pense que je nuit à mes performances car ces fichiers journaux réduits doivent se développer à nouveau.

Des questions:

  1. Pourquoi le fichier journal ne rétrécit-il pas après mes sauvegardes? Est-ce parce qu'il y a des transactions non engagées?
  2. Au début, je pensais que je devrais réduire les fichiers journaux après chaque sauvegarde de 5h00. Après avoir lu à quel point les performances sont mauvaises pour la performance, je pense maintenant que je dois effectuer des sauvegardes régulières des journaux toutes les deux heures pendant la journée. Est-ce exact?
  3. Ma sauvegarde complète normale de la base de données/journaux se produit tous les jours à 5h00 et prend parfois 3 heures. Si je planifie que les sauvegardes de journaux se produisent toutes les heures, que se passera-t-il lorsque la sauvegarde de journaux entrera en collision avec la sauvegarde de 5 h 00?
13
Elijah W. Gagne
  1. Pourquoi le fichier journal ne rétrécit-il pas après mes sauvegardes? Est-ce parce qu'il y a des transactions non engagées?

Le fichier journal NTFS réel ne "rétrécit" pas d'une sauvegarde du journal des transactions, mais les VLF (fichiers journaux virtuels) dans le journal des transactions sont marqués pour être réutilisés (car ils sont désormais sauvegardés et persistants sur le support), ce qui permet de boucler utilisation du journal des transactions. Si vous ne sauvegardez pas le journal des transactions, ou pas assez souvent, il n'y aura pas de VLF disponibles et cela entraînera la croissance du journal des transactions (à condition que la croissance automatique soit définie) pour accueillir des entrées de journal des transactions supplémentaires.

Au début, je pensais que je devrais réduire les fichiers journaux après chaque sauvegarde de 5h00. Après avoir lu à quel point les performances sont mauvaises pour la performance, je pense maintenant que je dois effectuer des sauvegardes régulières des journaux toutes les deux heures pendant la journée. Est-ce exact?

La réduction régulière et planifiée des fichiers n'est pas une bonne idée. Ce n'est que lorsque vous devez récupérer de l'espace dont vous avez besoin que vous envisagez un DBCC SHINKFILE. De plus, lorsque vous augmentez continuellement votre journal des transactions, vous pourriez entraver d'autres choses telles que la récupération de la base de données. Avec trop de VLF dans le journal des transactions (un problème courant lorsque le journal des transactions n'est agrandi que par un petit incrément de stockage), le délai de récupération de la base de données peut être plus long que souhaité.

Ma sauvegarde complète normale de la base de données/journaux se produit tous les jours à 5h00 et prend parfois 3 heures. Si je planifie que les sauvegardes de journaux se produisent toutes les heures, que se passera-t-il lorsque la sauvegarde de journaux entrera en collision avec la sauvegarde de 5 h 00?

Rien ne se passera, c'est une opération tout à fait légale. Voir ce graphique ci-dessous de MSDN . Lorsqu'il y a un point noir, ces deux opérations ne peuvent pas se produire en même temps. Comme vous pouvez le voir, une sauvegarde de la base de données et un journal des transactions sont autorisés simultanément.

enter image description here

Le point à retenir ici est que vous devriez sauvegarder votre journal des transactions plus fréquemment. La croissance des fichiers NTFS n'est pas le seul problème que vous pourriez rencontrer en ne sauvegardant pas votre journal des transactions plus fréquemment. Si vous deviez avoir un échec de stockage et que votre journal des transactions est perdu, vous ne pouvez restaurer que le moment de votre dernière sauvegarde du journal des transactions. Si le journal des transactions est perdu, vous ne pourrez pas sauvegarder la fin du journal et restaurer au point dans le temps de l'échec. Dans votre cas, vous pourriez perdre 24 heures de données. Mais si vous sauvegardez vos journaux de transactions toutes les 30 minutes, disons, votre perte de données maximale serait de 30 minutes. Dans ce cas, si votre journal des transactions a disparu et que vous avez votre sauvegarde complète et votre chaîne de journaux intacte, vous pouvez restaurer cette dernière sauvegarde de journal.

documentation TechNet sur la troncation du journal des transactions

10
Thomas Stringer

Le principal problème que vous rencontrez est que vous sauvegardez vos journaux une fois par jour. Le comportement du moteur est que les enregistrements de journal (espace utilisé) dans un fichier journal ne seront supprimés qu'après une sauvegarde réussie du journal. Cet espace est récupéré lorsqu'un point de contrôle se produit, mais si votre base de données est en restauration Full/Bulk Logged, les enregistrements de journal ne seront supprimés que s'ils ont été correctement sauvegardés.

Les sauvegardes de journaux sont destinées à être utilisées conjointement avec les sauvegardes complètes et doivent s'exécuter à intervalles réguliers entre les sauvegardes complètes. Cet intervalle peut être n'importe quelle période, bien que j'exécute généralement des sauvegardes de journal toutes les 15 minutes. Votre intervalle dépend de votre objectif de point de récupération (RPO) et de la quantité de données que vous pouvez perdre en cas de récupération.

Si vous effectuez des sauvegardes de journaux régulières, vous ne devriez pas avoir à effectuer de rétrécissements de fichiers réguliers, car vous gérerez l'espace du fichier journal avant qu'il ne soit forcé de croître.

5
Mike Fal