Domanda

Io sono il debug di stored procedure, e in questo momento io sono interessato a ciò che ha funzionato in quale ordine e quale che i parametri al contrario di come le cose veloci corse e quello che possono intrufolarsi in mezzo e causare un rallentamento.

Così, ho catturato un paio di minuti vale la pena di traccia. Il problema è che c'è troppa roba, e ho bisogno di restringere il campo. Se lo faccio File -> Save As, ottengo le seguenti opzioni:

  • File di traccia ...
  • Trace modello ...
  • Tabella di traccia ...
  • Trace file XML ...
  • Trace file XML per Replay ...

Ora, queste sono le opzioni decenti, ma quello che voglio veramente è un formato tabulare, ad esempio CSV. Credo che le virgole nella traccia SP sarebbe probabilmente rovinare il formato CSV. Mi sarebbe piaciuto uso qualcos'altro, come ad esempio || come delimitatore.

Una volta che hanno il formato tabellare, posso filtrare verso il basso usando grep, ecc e quindi facilmente elaborarlo con Python per vedere le cose esatte che voglio. Ho iniziato l'analisi del file XML con uno script, ma sono ritrovato a spendere troppo tempo sul formato di file di traccia XML (non hanno utilizzato biblioteca lxml prima).

Quindi ... c'è un modo più semplice? Posso almeno copiarlo Excel in qualche modo?

È stato utile?

Soluzione

Se si salva in una tabella di traccia; è possibile ottenere i dati in una tabella in SQL Server che vi permetterà di manipolare al vostro cuore di contenuti; tra cui il dumping fuori per CSV, se ancora necessaria. La colonna di dati di testo è pienamente rappresentato nella tabella.


Se si sceglie Salva Tabella di traccia . Verrà richiesto per il nome della tabella e il database. Diciamo si chiama ProfilerTemp nel scratch database.

Inserisci quelli; è possibile interrogare la tabella utilizzando

select * from scratch.dbo.ProfilerTemp

Si vedrà tutto nella finestra di traccia nella tabella. Se non ha ancora filtrare verso il basso per le procedure memorizzate solo e vogliono solo loro nel select

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

Questa filtri fuori le chiamate Procedura non e eventuali cadute della connessione che si possono avere. Potrebbe essere necessario aggiungere più filtri a seconda di ciò che si sta cercando di fare.

Se si desidera che questo come un file di testo; scegliere interrogazione - i risultati in file ed eseguire la query. Ciò richiederà il nome del file e vi darà il testo del parametro come file di testo.

Altri suggerimenti

TL; DR:. Copia in un editor di testo, manuale di preparazione, quindi incollare in Excel

Ho poca esperienza con SQL Server, quindi non so se questo funzionerà per gli altri, ma lo ha fatto per me:

  • Seleziona desiderato righe in SQL Server Profiler. Ctrl + C per copiare.
  • Incolla in un editor di testo che può fare ricerca di espressioni regolari e sostituire (per esempio Notepad ++ nel mio caso).
  • Regex sostituire (N'(''')?[^']*?)\r\n(([^']*?)\r\n)?(([^']*?)\r\n)? con $1 $4 $6
    • Questo cancella tutti i ritorni a capo da script SQL.
    • Continuare a fare "Sostituisci tutto" fino a quando sono altri risultati vengono trovati.
  • Regex sostituire (Batch(Starting|Completed)[^\\]*?)\r\n con $1
    • Questo cancella a capo da più roba SQL. Ancora una volta, tenere la sostituzione fino a quando non ha prodotto risultati.
  • Regex sostituire \r\nset con set
    • Questo cancella tutti i ritorni a capo da script Audit Login
  • Potrebbe essere necessario fare di più la sostituzione, si ottiene l'idea.
  • Incolla in Excel utilizzando il "Testo Importazione guidata." Utilizzare le schede come la deliminator.
  • Scelta per la prima colonna e rimuovere le righe inutili (ad esempio "Audit Login" nel mio caso). Potrebbe anche essere necessario per spostare manualmente alcuni dati su una colonna (ad esempio "EntityFramework" i dati nel mio caso)

Ho avuto un sacco di file di traccia SQL Profiler che contengono eventi stallo traccia che avevo bisogno di analizzare. Ho finito per convertirli in un singolo file XML utilizzando SQL Profiler, e poi la lettura di quel file XML con Python, utilizzando le librerie lxml e pandas.

Poiché i dati finisce in un Dataframe panda, si può facilmente convertirlo in formato CSV, Excel, ... o analizzarlo in Python (se si ha familiarità con i panda).

Lo script è disponibile come Gist . E 'scritto appositamente per i file di stallo in traccia, come non ho avuto altre tracce disponibili. In altre parole, potrebbe essere necessario modificarlo un po 'per servire il vostro scopo. Non preoccupatevi se il file XML è di grandi dimensioni (più di 100 MB); gli usi di script iterparse() , il che significa che il file non verrà letto in memoria e solo gli elementi pertinenti saranno catturati. Per esempio. un file xdl di ca. 220MB è stato analizzato in meno di 13 secondi.

Salvataggio dei file di traccia come (estensione xdl) XML:

estratto

Assicurati di selezionare l'opzione tutti gli eventi in un unico file .

Salva

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top