Question

Je suis débogage des procédures stockées, et en ce moment je suis intéressé par ce qui a couru dans quel ordre et qui quels paramètres par opposition à la façon dont les choses rapidement couru et ce qui peut se faufiler entre les deux et provoquer un ralentissement.

Alors, j'ai capturé quelques minutes d'trace. Le problème est qu'il ya trop de choses, et je dois le réduire. Si je fais File -> Save As, je reçois les options suivantes:

  • Fichier Trace ...
  • Trace modèle ...
  • Trace le tableau ...
  • Fichier XML Trace ...
  • fichier XML Trace pour la relecture ...

Maintenant, ce sont des options décentes, mais ce que je veux vraiment est un format de tableau au format CSV. Je pense que les virgules dans la trace de SP serait probablement gâcher le format CSV. Je serais heureux utiliser autre chose, comme || comme séparateur.

Une fois que j'ai le format de tableau, je peux filtrer vers le bas à l'aide grep, etc., puis traiter facilement avec Python pour voir les choses exactes que je veux. J'ai commencé l'analyse du fichier XML avec un script, mais me suis retrouvé passer trop de temps sur le format de fichier de trace XML (n'ont pas utilisé la bibliothèque lxml avant).

Alors ... est-il un moyen plus facile? Puis-je au moins le copier dans Excel en quelque sorte?

Était-ce utile?

La solution

Si vous enregistrez dans une table de trace; vous pouvez obtenir les données dans une table dans SQL Server qui vous permettra de le manipuler à votre contenu de coeurs; y compris le dumping dehors au format CSV si elle est encore nécessaire. La colonne de données texte est entièrement représenté dans le tableau.


Si vous choisissez Enregistrer Trace table . Vous serez invité à entrer le nom de la table et la base de données. Disons que vous appelez ProfilerTemp dans la base de données de zéro.

Entrez les; vous pouvez interroger la table en utilisant

select * from scratch.dbo.ProfilerTemp

Vous verrez tout dans la fenêtre de trace dans le tableau. Si vous didnt filtre vers le bas aux procédures stockées et que voulez juste dans la sélection

Select textdata from [Scratch].[dbo].[ProfilerTemp] 
  where eventclass = 10 
  And textdata like 'exec %' 
  and not cast(TextData as nvarchar(max))= 'exec sp_reset_connection'

Ce filtre les appels non procédure et des réinitialisations de connexion que vous pouvez avoir. Vous devrez peut-être ajouter d'autres filtres en fonction de ce que vous essayez de faire.

Si vous voulez ceci comme un fichier texte; choisissez requête - résultats pour fichier et exécuter la requête. Cela demandera le nom du fichier et vous donner le texte du paramètre en tant que fichier texte.

Autres conseils

TL; DR:. Copier dans un éditeur de texte, manuellement préparation, puis coller dans Excel

J'ai très peu d'expérience avec SQL Server, donc je ne sais pas si cela va fonctionner pour d'autres, mais il a fait pour moi:

  • Sélectionnez désiré lignes dans SQL Server Profiler. Ctrl + C pour copier.
  • Coller dans un éditeur de texte qui peut faire la recherche d'expression régulière et remplacer (par exemple Notepad ++ dans mon cas).
  • Regex remplacer (N'(''')?[^']*?)\r\n(([^']*?)\r\n)?(([^']*?)\r\n)? avec $1 $4 $6
    • Ceci efface tous les sauts de ligne à partir de scripts SQL.
    • Continuez à faire « Tout remplacer » jusqu'à ce qu'il n'y a plus de résultats trouvés.
  • Regex remplacer (Batch(Starting|Completed)[^\\]*?)\r\n avec $1
    • Ceci efface les nouvelles lignes de plus de choses SQL. Encore une fois, gardez le remplacement jusqu'à aucun résultat.
  • Regex remplacer \r\nset avec set
    • Ceci efface tous les retours à la ligne de vérification des scripts Connexion
  • Vous devrez peut-être faire plus de remplacer, vous voyez l'idée.
  • Coller dans Excel à l'aide du « Assistant Importation de texte. » Utiliser les onglets comme le deliminator.
  • Trier par la première colonne et supprimer toutes les lignes inutiles (par exemple « Audit Connexion » dans mon cas). Vous devrez peut-être déplacer manuellement des données sur une colonne (par exemple des données « EntityFramework » dans mon cas)

J'ai eu un tas de fichiers de trace SQL Profiler contenant des événements de trace de blocage que je devais analyser. J'ai fini de les convertir en un seul fichier XML à l'aide de profils SQL, puis lire ce fichier XML avec Python, en utilisant les bibliothèques lxml et pandas.

Comme les données se termine dans un Dataframe de pandas géants, vous pouvez facilement le convertir au format CSV, Excel, ... ou l'analyser en Python (si vous êtes familier avec pandas géants).

Le script est disponible en tant que essentiel . Il est écrit spécifiquement pour les fichiers de trace de blocage, comme je n'ai pas eu d'autres traces disponibles. En d'autres termes, vous pourriez avoir besoin de ruser un peu pour servir votre but. Ne vous inquiétez pas si le fichier XML est grand (plusieurs 100 Mo); les utilisations de script iterparse() , ce qui signifie que le fichier ne sera pas lu en mémoire et seuls les éléments pertinents seront capturés. Par exemple. un fichier xdl d'environ 220MB a été analysé en moins de 13 secondes.

Sauvegarde des fichiers de trace au format XML (extension xdl):

Assurez-vous que vous sélectionnez l'option tous les événements dans un seul fichier .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top