web-dev-qa-db-fra.com

Pourquoi faut-il si longtemps pour voir les journaux sur un serveur?

J'essaie simplement de rechercher davantage d'informations verbeuses pour une tâche de plan de maintenance qui a échoué. J'ouvre la visionneuse de fichiers journaux et cochez la case pour afficher les journaux de mon plan de maintenance. Il n'y a pas de filtres actifs à part cela dans cet exemple. Ensuite, je joue au jeu d'attente .....

J'ai eu presque 20 minutes pour que les journaux montrent. J'ai donc pensé que cela pourrait simplement prendre le temps de charger tous les journaux du début de ce type de serveurs. J'ai réduit le filtre à environ 3 jours car c'est tout ce dont j'avais besoin de toute façon. Cela est arrivé plus vite mais a toujours pris 4 minutes pour montrer. Notez que c'est la première fois sur mon ordinateur que j'ai essayé de voir ces journaux afin que cela puisse également jouer un facteur. J'ai également essayé de regarder les journaux directement sur le serveur, mais obteniez des résultats similaires.

Est-ce pair pour le cours? Devrais-je m'attendre à regarder les journaux comme une expérience comme celle-ci? Y a-t-il quelque chose que je devrais faire ou vérifier? Je prévois de vérifier l'âge du journal et de voir si cela peut être purgé, mais cela n'affecterait-il toujours pas de regarder des journaux pour une courte période de X jour?

7
Matt

Oui, la lecture des journaux prend beaucoup de temps dans la visionneuse de fichiers journaux. Quelques choses pour le réparer:

Essayez d'utiliser xp_readerrorlog avec des paramètres filtrés pour obtenir uniquement les données souhaitées:

  • @ P1 est le fichier journal que vous souhaitez regarder (0 est à jour, 1 est la première archive, 2 est seconde, etc.)
  • @ p2 est null pour le journal d'erreur, 2 pour l'agent
  • @ p3 et @ p4 sont des chaînes à rechercher dans la sortie

De cette façon, vous obtenez simplement les rangées que vous voulez.

Si vous vous trouvez fréquemment de ce genre de chose, courez un travail pour faire du journal d'erreur périodiquement (j'aime chaque semaine) afin que vous n'ayez pas à passer au piège autant de choses. De plus, assurez-vous de ne pas enregistrer des sauvegardes réussies ou des connexions réussies sur le journal des erreurs.

8
Brent Ozar

Par défaut, SQL Server ne roulera que sur le journal des erreurs lorsque l'instance redémarre. Si vous avez une excellente disponibilité du serveur (peut-être que vous ne comprenez peut-être que quelques fois par an), le journal des erreurs pourrait devenir assez vaste (je l'ai vu atteindre de nombreux Go dans certaines situations).

Le journal des erreurs est stocké sous forme de fichier texte, ce qui l'ouvre donc dans la visionneuse du journal nécessite essentiellement SQL Server pour ouvrir et analyser l'intégralité du fichier texte - si vous avez déjà ouvert un fichier texte de 10 Go, vous savez que cela peut être lent.

J'ai généralement un travail qui va rouler sur le journal des erreurs SQL Server une fois par semaine, de sorte que le journal reste suffisamment petit qu'il est rapide à ouvrir - et remonte également assez loin un seul fichier que j'ai besoin.

Pour rouler sur votre journal, il vous suffit d'exécuter cette procédure stockée (et planifiez un travail d'agent pour l'exécuter hebdomadaire:

EXEC sp_cycle_errorlog;

Vous verrez toujours les vieux journaux archivés dans l'explorateur d'objet: ObjectExplorerLogs

Et vous pouvez afficher plusieurs journaux dans la visionneuse du journal : -LogViewer

Vous pouvez également souhaiter limiter le nombre de fichiers journaux d'archivage que vous conservez sur votre serveur. Pour ce faire, cliquez avec le bouton droit de la souris sur le dossier "SQL Server Logs" de l'Explorateur d'objet et sélectionnez "Configurer". Puis marquez la case à cocher et définissez un nombre maximum de fichiers journaux. Log Retention

Vous devriez généralement vous tromper sur le côté de la réglage plus haut que vous ne le pensez. Si vous avez déjà un problème sur lequel le serveur redémarre soudainement plusieurs fois ou que le service SQL Server est recyclé à plusieurs reprises, le journal d'erreur tourne chaque redémarrage et vos journaux ne reviendront pas autant de semaines que vous le souhaitez.

Vous pouvez également définir la rétention de journal via xp_instance_regwrite. Dans l'exemple ci-dessous, il définit cette valeur pour conserver 10 journaux d'erreur:

USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', 
    N'Software\Microsoft\MSSQLServer\MSSQLServer', 
    N'NumErrorLogs', 
    REG_DWORD, 
    10
GO
6
AMtwo

Les plans de maintenance génèrent leurs propres fichiers journaux si vous choisissez cette option. Lorsque vous regardez MP Historique, il lit à partir de [msdb]. [DGO]. [SysmaintPlan_log] et [msdb]. [DGO]. [SysmaintPlan_logdetail], pas ces fichiers texte. Purger ceci Avec une tâche de nettoyage d'historique, car cela nettoiera les tables et les fichiers.

SQL Server ErrorLog et AgentLog doit être maintenu correctement, mais MP est une conversation/effort distincte

Dans la tradition de Grande MS ... Aucun index sur ces tables, autres que regroupés sur [MSDB]. [DBO]. [SysmaintPlan_log]

2
Kevin3NF

Vous devez définitivement rouler votre journal d'erreur SQL et vos journaux d'erreur SQL Agent comme @AMTWO suggéré dans le commentaire ci-dessus.

Étant donné que la question concerne le journal du plan de maintenance de la lecture, je vais expliquer comment vous pouvez garder la taille gérable et ouverte rapidement.

Pour la journalisation du plan de maintenance Vous souhaitez créer un nouveau fichier à chaque plan de maintenance de l'heure est exécuté.

enter image description here

Cliquez sur cette icône et vous obtenez la fenêtre suivante. 'Créer un nouveau fichier' doit être par défaut et confirmer cela. Ne vérifiez pas "Ajouter au fichier" car cela créera un fichier unique pour toute exécution.

enter image description here

Vous pouvez avoir une autre tâche de maintenance pour nettoyer les fichiers journaux plus âgés de plus de XX jours pour éviter le remplissage du disque.

2
SqlWorldWide