2010-11-23 22 views
32

Estoy depurando procedimientos almacenados, y ahora estoy interesado en qué funcionó en qué orden y qué parámetros en lugar de qué tan rápido corrían las cosas y qué puede colarse en el medio y causar una desaceleración.Cómo volcar una salida de SQL Server Profiler 2008 a un archivo similar a CSV

Por lo tanto, capturé un par de minutos de rastreo. El problema es que hay demasiadas cosas y necesito reducirlas. Si hago File -> Save As, consigo las siguientes opciones:

  • del archivo de rastreo ...
  • curva de plantilla ...
  • Tabla de traza ...
  • traza de archivo XML ...
  • Rastrear archivo XML para reproducir ...

Ahora, estas son opciones decentes, pero lo que realmente quiero es un formato tabular, como CSV. Creo que las comas en SP trace probablemente arruinarían el formato CSV. Con mucho gusto usaría algo más, como || como delimitador.

Una vez que tengo el formato tabular, puedo filtrarlo usando grep, etc. y luego procesarlo fácilmente con Python para ver exactamente las cosas que quiero. Empecé a analizar el archivo XML con una secuencia de comandos, pero me encontré gastando demasiado tiempo en el formato de archivo XML de rastreo (no he usado la biblioteca lxml antes).

Entonces ... ¿hay una manera más fácil? ¿Puedo al menos copiarlo a Excel de alguna manera?

Respuesta

54

Si lo guarda en una tabla de seguimiento; puede obtener los datos en una tabla en SQL Server que le permitirá manipularlos al contenido de su corazón; incluyendo el vertido a CSV si todavía se requiere. La columna de datos de texto está completamente representada en la tabla.


Si elige guardar-> Tabla de seguimiento. Se le pedirá el nombre de la tabla y la base de datos. Digamos que lo llamas ProfilerTemp en la base de datos.

Ingrese los; Puede consultar la tabla usando

select * from scratch.dbo.ProfilerTemp 

Verá todo en la ventana de traza en la tabla. Si usted didnt filtro hacia abajo a los procedimientos almacenados y simplemente quiere sólo en el selecto

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

Esto filtra las llamadas improductivas, procedimiento y restablece cualquier conexión que pueda tener. Es posible que deba agregar más filtros según lo que esté intentando hacer.

Si desea esto como un archivo de texto; elegir consulta - resultados para archivar y ejecutar la consulta. Esto solicitará el nombre del archivo y le dará el texto del parámetro como un archivo de texto.

+0

Puede copiar y pegar la cuadrícula en Excel; pero obtienes más de una línea y es por eso que no lo estoy sugiriendo. – u07ch

+1

Gracias, porque la respuesta correcta puede marcar unos 150 puntos, tendría que aceptar uno con los pasos detallados y más detallados. –

+1

Creo que los puntos restan mérito a stackoverflow, es como Boinc. Tengo 14 millones de puntos, pero no se puede hacer nada con ellos, así que ¿para qué molestarse? – u07ch

0

Tenía un montón de archivos de rastreo de SQL Profiler que contenían eventos de seguimiento de interbloqueos que necesitaba analizar. Terminé convirtiéndolos en un único archivo XML utilizando el Analizador de SQL, y luego leyendo ese archivo XML con Python, usando las bibliotecas lxml y pandas.

Como los datos terminan en pandas Dataframe, puede convertirlo fácilmente a CSV, Excel, ...o analízalo en Python (si estás familiarizado con pandas).

La secuencia de comandos está disponible como gist. Está escrito específicamente para archivos de rastreo de punto muerto, ya que no tenía otros rastros disponibles. En otras palabras, puede necesitar modificarlo un poco para cumplir su propósito. No se preocupe si el archivo XML es grande (varios 100 MB); el script usa iterparse(), lo que significa que el archivo no se leerá en la memoria y solo se capturarán los elementos relevantes. P.ej. un archivo xdl de ca. 220 MB se analizaron en menos de 13 segundos.

Almacenamiento de los archivos de seguimiento como XML (xdl extensión):

Extract

asegúrese de seleccionar la opción todos los eventos en un solo archivo.

Save

2

TL; DR: Copia en un editor de texto, preparar manualmente, a continuación, pegar en Excel.

que tienen muy poca experiencia con SQL Server, así que no sé si esto va a funcionar para otros, pero lo hizo por mí:

  • filas Seleccionar deseados en SQL Server. Ctrl + C para copiar.
  • Pegue en un editor de texto sin formato que pueda buscar y reemplazar expresiones regulares (por ejemplo, Notepad ++ en mi caso).
  • Regex reemplazar (N'(''')?[^']*?)\r\n(([^']*?)\r\n)?(([^']*?)\r\n)? con $1 $4 $6
    • Esto borra todas las nuevas líneas de secuencias de comandos SQL.
    • Siga haciendo "Reemplazar todo" hasta que no se encuentren más resultados.
  • Regex reemplazar (Batch(Starting|Completed)[^\\]*?)\r\n con $1
    • Esto borra las nuevas líneas de más cosas de SQL. De nuevo, sigue reemplazando hasta que no haya resultados.
  • Regex reemplazar \r\nset con set
    • Esto borra todas las nuevas líneas de Scripts de entrada de auditoría
  • Es posible que tenga que hacer más sustitución, se entiende la idea.
  • Pegue en Excel utilizando el "Asistente de importación de texto". Use pestañas como delimitador.
  • Ordene por la primera columna y elimine las filas que no sean útiles (por ejemplo, "Inicio de sesión de auditoría" en mi caso). Es posible que también deba mover manualmente algunos datos a través de una columna (por ejemplo, datos de "EntityFramework" en mi caso)
Cuestiones relacionadas