2009-12-23 16 views
14

Estoy tratando de analizar un punto muerto en el perfilador de SQL Server 2008. Sé cómo encontrar las consultas SQL incriminatorias, pero las consultas recopiladas no incluyen valores de parámetros.Cómo obtengo los valores de los parámetros para la consulta de SQL Server en el Analizador de SQL Server

Me otras palabras, puedo ver algo como esto:

DELETE FROM users WHERE id = @id 

Pero lo que me gustaría ver es la siguiente:

DELETE FROM users WHERE id = 12345 

supongo que hay algunos eventos o columnas adicionales que necesito recoger en el generador de perfiles, pero no sé cuál. Actualmente estoy usando la plantilla "TSQL_LOCKS".

Cualquier sugerencia sería muy apreciada.

Gracias,

Adrian

de responsabilidad: He hecho una pregunta similar antes, pero supongo que era demasiado específico, por lo que me dieron ninguna respuesta. Estoy empezando otro intento con este.

Respuesta

1

iniciar un rastreo con los siguientes eventos que tienen todas las casillas de verificación verificado:

SQL: BatchCompleted 
SQL: BatchStarting 
Deadlock graph 
Lock:Deadlock 
Lock:Deadlock chain 

Después de producirse el bloqueo, se detiene la traza , luego haz clic en la clase de evento del gráfico de interbloqueo.

Esto debería darle una buena idea de lo que está pasando mal.

+0

Gracias, pero ya lo sé. El problema es que el gráfico de interbloqueo no contiene valores de parámetros, solo la consulta explicada aquí: http://stackoverflow.com/questions/1952830/how-do-i-get-parameter-values-for-sql-server- query-in-sql-server-profiler –

1

Si está utilizando un procedimiento almacenado (que parece que es) o Hibernate/NHibernate, es posible que deba activar el evento de inicio Procedimientos almacenados (SP: StmtStarting) y RPC: Inicio. Esto mostrará los parámetros en su propia línea después de la consulta.

Algo así como:

SP: StmtStarting DELETE FROM usuarios WHERE id = @id

RPC: A partir sp_execute ejecutivo 12345

+0

¡Gracias por la pista! No estaba usando un SP en este caso, pero aún es bueno saberlo. –

3

El Profiler contendrá los valores de los parámetros en los RPC:Completed/RPC:Starting eventos. Pero ya recibiste respuestas diciéndote esto.

Lo que quiero agregar es que es muy poco necesario conocer los valores de tiempo de ejecución de los parámetros para analizar un gráfico de interbloqueo. Primero, porque si 'usuarios' está involucrado en el punto muerto, el gráfico de interbloqueo en sí mismo revelará qué @id es el conflicto, si el conflicto está en una clave. En segundo lugar, más importante, para un escenario de punto muerto es irrelevante las claves exactas que están involucradas. No es como un bloqueo ocurre porque uno borra el usuario con el ID 123 pero no sucederá cuando elimine el usuario 321.

Si decidió pedir SO en primer lugar, creo que lo mejor sería publicar el punto muerto real gráfico y deje que la comunidad lo mire. Aquí hay muchos que pueden responder bastantes preguntas solo desde el gráfico de interbloqueo XML.

+0

Por cierto, si decide publicar el gráfico completo, no solo la mitad (?), Publique el gráfico de interbloqueo real, no una imagen del mismo. es decir. el XML del evento de interbloqueo, no una captura de pantalla de la imagen procesada. Hay MUCHA información que se pierde durante el renderizado. –

+0

Gracias por su respuesta, pero creo que hay un malentendido. La imagen a la que me he vinculado en mi otra publicación no es de mi computadora. Lo obtuve de un tutorial sobre cómo usar el perfilador de SQL Server. Muestra los valores de los parámetros en la información sobre herramientas del gráfico, mientras que la información sobre herramientas de mi propio gráfico solo incluye las consultas, pero no los valores de los parámetros. Por eso publiqué mi pregunta. –

+0

@Adrian: siempre mire dentro del XML para el análisis. La representación gráfica en SSMS es solo para echar un vistazo rápido. Guarde el evento (haga clic derecho sobre él) y luego abra el archivo guardado como XML ordinario. –

Cuestiones relacionadas