Je suis en train de déboguer des procédures stockées et je suis maintenant intéressé par ce qui a été exécuté dans quel ordre et par quels paramètres, par opposition à la rapidité d'exécution et ce qui pourrait se glisser entre les deux et causer un ralentissement.
J'ai donc capturé quelques minutes de trace. Le problème, c'est qu'il y a trop de matériel et je dois le réduire. Si je fais File -> Save As
, j'obtiens les options suivantes:
Maintenant, ce sont des options décentes, mais ce que je veux vraiment, c’est un format tabulaire, tel que CSV. Je pense que des virgules dans la trace SP dérangeraient probablement le format CSV. J'utiliserais volontiers quelque chose d'autre, tel que ||
en tant que délimiteur.
Une fois que j'ai le format tabulaire, je peux le filtrer avec grep
, etc., puis le traiter facilement avec Python pour voir exactement ce que je veux. J'ai commencé à analyser le fichier XML avec un script, mais je me suis retrouvé à passer trop de temps sur le format de fichier trace XML
(je n'ai jamais utilisé la bibliothèque lxml
auparavant).
Alors ... y a-t-il un moyen plus facile? Puis-je au moins le copier dans Excel d'une manière ou d'une autre?
Si vous enregistrez dans une table de trace; vous pouvez obtenir les données dans une table dans SQL Server, ce qui vous permettra de les manipuler à votre guise; y compris le vidage vers CSV si toujours nécessaire. La colonne de données texte est entièrement représentée dans la table.
Si vous choisissez Enregistrer → Table de trace . Vous serez invité à entrer le nom de la table et de la base de données. Disons que vous l'appelez ProfilerTemp dans le scratch de la base de données.
Entrez ceux-ci; vous pouvez interroger la table en utilisant
select * from scratch.dbo.ProfilerTemp
Vous verrez tout dans la fenêtre de trace dans la table. Si vous ne filtrez pas uniquement les procédures stockées et souhaitez les sélectionner
Select textdata from [Scratch].[dbo].[ProfilerTemp]
where eventclass = 10
And textdata like 'exec %'
and not cast(TextData as nvarchar(max))= 'exec sp_reset_connection'
Ceci filtre les appels hors procédure et les éventuelles réinitialisations de connexion. Vous devrez peut-être ajouter plus de filtres en fonction de ce que vous essayez de faire.
Si vous voulez ceci en tant que fichier texte; choisissez la requête - résultats à archiver et à exécuter la requête. Cela vous demandera le nom du fichier et vous donnera le texte du paramètre sous forme de fichier texte.
TL; DR: Copier dans un éditeur de texte, préparer manuellement, puis coller dans Excel.
J'ai très peu d'expérience avec SQL Server, donc je ne sais pas si cela fonctionnera pour d'autres, mais cela a fonctionné pour moi:
(N'(''')?[^']*?)\r\n(([^']*?)\r\n)?(([^']*?)\r\n)?
par $1 $4 $6
(Batch(Starting|Completed)[^\\]*?)\r\n
par $1
\r\nset
par set
J'avais un tas de fichiers de trace de SQL Profiler contenant des événements de trace d'interblocage que je devais analyser. J'ai fini par les convertir en un seul fichier XML à l'aide de SQL Profiler, puis à lire ce fichier XML avec Python à l'aide des bibliothèques lxml
et pandas
.
Lorsque les données se retrouvent dans des pandas Dataframe
, vous pouvez facilement les convertir en fichiers CSV, Excel, ... ou les analyser en Python (si vous connaissez bien les pandas).
Le script est disponible en tant que Gist . Il est écrit spécifiquement pour les fichiers de trace d'interblocage, car je n'avais aucune autre trace disponible. En d'autres termes, vous aurez peut-être besoin de le modifier légèrement pour atteindre votre objectif. Ne vous inquiétez pas si le fichier XML est volumineux (plusieurs 100 Mo); le script utilise iterparse()
, ce qui signifie que le fichier ne sera pas lu en mémoire et que seuls les éléments pertinents seront capturés. Par exemple. un fichier xdl
de ca. 220MB ont été analysés en moins de 13 secondes.
Enregistrement des fichiers de trace au format XML (extension xdl
):
Assurez-vous de sélectionner l’option tous les événements dans un seul fichier.