Comment la réduction d'un fichier journal SQL Server affecte-t-elle les performances?

19

J'ai une base de données SQL Server 2008 qui a un fichier de données d'environ 2 Go, mais le fichier journal dépasse 8 Go. Avec les bases de données antérieures à 2008, je pouvais utiliser le «journal de sauvegarde» et l' TRUNCATE_ONLYoption, mais ce n'est plus disponible avec les bases de données 2008 et ultérieures.

J'ai un script qui tronque le fichier journal:

USE [MyDatabase]
GO
ALTER DATABASE [MyDatabase] SET RECOVERY SIMPLE WITH NO_WAIT
DBCC shrinkfile('MyDatabase_log', 1)
ALTER DATABASE [MyDatabase] SET RECOVERY FULL WITH NO_WAIT
GO

Cela tronque complètement le fichier journal, mais ma question est: cela affecte-t-il les performances?

J'effectue deux sauvegardes complètes par jour afin que le journal ne soit pas vraiment nécessaire en ce qui concerne le transfert de données.

MartinHT
la source

Réponses:

26

Je recommande vraiment de lire l' importance d'une bonne gestion de la taille du journal des transactions par Paul S. Randal.

La quintessence est qu'il n'y a que deux très bonnes façons de gérer le journal des transactions :

  1. Soit aller avec des sauvegardes de fichiers LOG régulières et le fichier LOG réutilisera son espace après chaque sauvegarde LOG et ne se développera pas indéfiniment, ou

  2. Utilisez le modèle de récupération SIMPLE et vous n'avez pas à vous soucier de la taille de votre fichier journal, car vous effectuez des sauvegardes complètes régulières.

Ce qui concerne la troncature et les performances du fichier LOG, c'est que vous obtiendrez toujours un résultat de performance lorsque le fichier LOG doit être augmenté (une citation du blog ci-dessus):

Si vous réduisez le journal, il va de nouveau s'agrandir, ce qui peut entraîner une fragmentation VLF et entraîner définitivement une pause de votre charge de travail pendant la croissance du journal, car le journal ne peut pas utiliser l'initialisation instantanée [...]

Mise à jour: ne confondez pas la troncature du fichier journal avec la réduction du fichier de données. La réduction du fichier de données est vraiment mauvaise. Voir Pourquoi vous ne devez pas réduire vos fichiers de données pour plus de détails.

MicSim
la source
L'URL expliquant pourquoi vous ne devez pas réduire vos fichiers de données a changé. sqlskills.com/blogs/paul/…
ripvlan
tout comme l'URL de l'importance d'une bonne gestion de la taille du journal des transactions: sqlskills.com/blogs/paul/…
ripvlan
6

OK d'abord oui le journal est nécessaire même avec les sauvegardes complètes quotidiennes si vous souhaitez recovoer en cas de problème. Nous sauvegardons notre journal des transactions toutes les 15 minutes. Le problème est que vous ne sauvegardez pas votre journal des transactions et c'est pourquoi le journal se développe de manière scandaleuse. Vous ne devriez presque jamais avoir besoin de réduire un journal des transactions si vous effectuez des sauvegardes correctes du journal des transactions.

Vous devrez sauvegarder la base de données avant de tronquer le journal. Je suggère de le faire en dehors des heures d'ouverture afin qu'aucune nouvelle donnée ne soit insérée entre la sauvegarde et la troncature. Ensuite, configurez les sauvegardes de journal des transactions appropriées afin que vous n'ayez plus jamais ce problème.

Quant à affecter les performances, bien sans connaître les détails du matériel et de l'utilisation de votre système, ce serait difficile à dire.

HLGEM
la source
4

À quelle vitesse le journal des transactions se développe-t-il? S'il est plutôt rapide, vous affecterez les performances en les réduisant à presque rien, car il devra passer du temps à les repousser. Cela ne signifie pas que vous ne devriez pas le réduire de temps en temps, mais vous devez penser au problème de taille plutôt que de le réduire au minimum. Le perf est-il énorme? Probablement pas, mais cela dépend de la charge sur le serveur (nombre de transactions, etc.).

Une chose que je trouve problématique est "J'effectue 2 sauvegardes complètes par jour, donc le journal ne devrait pas vraiment être nécessaire en ce qui concerne le transfert de données." Le journal est extrêmement important pour les points entre vos sauvegardes complètes. Même deux fois par jour n'élimine pas la nécessité d'un fichier journal pour la reprise après sinistre, sauf s'il s'agit d'une base de données en lecture seule (si c'était le cas, vous ne verriez pas l'énorme augmentation du fichier journal, cependant).


la source
Le journal prend environ 4 à 6 mois pour atteindre cette taille, il n'est donc pas très rapide. J'ai pensé (peut-être à tort) que le fichier journal contenait des transactions entre les sauvegardes complètes, c'est pourquoi j'ai mentionné que je fais 2 sauvegardes complètes par jour, donc le contenu du journal entre ne peut pas être trop grand. Comme je l'ai dit, j'ai peut-être mal compris le concept de fichier journal.