2009-09-22 17 views
9

Estoy usando una versión de SQL Server 2005 que no es compatible con el generador de perfiles, tratando de encontrar la mejor manera de comparar el rendimiento de dos procedimientos almacenados. He ejecutado el plan de ejecución para cada uno, pero no está claro para mí cuál de las métricas proporcionadas debería enfocarme. ¿Paso y sume los diversos costos? ¿Cuál es el mejor enfoque?¿Cómo se mide el rendimiento de un procedimiento almacenado?

Gracias de antemano.

Respuesta

17

vistazo a este artículo: Measuring SQL Performance

Si no desea registrar en la cuenta gratuita, aquí es una solución 1:

DECLARE @start datetime, @stop datetime 
SET @start = GETDATE() 
EXEC your_sp 
SET @stop = GETDATE() 

segundo:

SET STATISTICS TIME ON 
EXEC your_sp 

tercera:

SET STATISTICS IO ON 
EXEC your_sp 

Por cierto, este sitio tiene algunos buenos artículos. Yo recomendaría registrarme Es gratis.

+4

Requiere registro. –

+0

Sí, lo olvidé. Corregí mi respuesta ahora. –

+5

primera opción, no olvides _PRINT 'Tomar:' + CONVERTIR (varchar (20), datediff (ms, @ start, @ stop) /1000.0) + 'seconds'_ –

1

La pregunta es ¿para qué estás optimizando? ¿Es por la velocidad o los recursos utilizados?

Si la velocidad, en el analizador de consultas me gustaría ver la ejecución entre varias ejecuciones, hacer cambios y volver a cronometrarlos.

Si se trata de recursos, entonces revisaría el plan de ejecución. En ese caso, comenzaría con los peores delincuentes y trabajaría en la lista. Sumarlos le dirá el rendimiento general, pero la mayoría de los casos es un artículo o 2 que es el cuello de la botella.

0

Como la mayoría de las preguntas, la respuesta depende ... En el análisis final, la única medida que importa es la percepción del usuario final, que puede verse afectada por muchas cosas, incluyendo no solo el procedimiento almacenado, sino también el rendimiento de la red patrones (¿se llama al sProc 20x/day, o 1000x/second?), etc., y el sProc puede no ser el factor determinante.

Pero si el procedimiento almacenado es la "pieza del rompecabezas" que está teniendo el mayor impacto adverso en la percepción del usuario final de alguna función, entonces, debe mirar el tiempo transcurrido para ejecutar el procedimiento almacenado. Pero esto en sí mismo puede verse afectado por numerosas métricas subyacentes, y para hacer algo al respecto es necesario analizarlas todas para determinar cuál de ellas es la principal o principal contribuyente al rendimiento general del proceso almacenado.

0

Siempre puede instalar un arnés de prueba para llamar a sus procedimientos almacenados y medir los tiempos de las llamadas. Lamentablemente, no obtendrá los detalles sobre qué partes del procedimiento almacenado están causando la desaceleración.

Siempre puede ejecutar el Procedimiento almacenado a mano en el Analizador de consultas y medir los resultados de esa manera también. El arnés .NET solo automatiza el proceso para usted.

0

La solución simple de baja ceja es ejecutarlos con instrucciones de impresión imprimiendo el tiempo de ejecución en varias partes. Esto no ayudará si el problema de rendimiento es más sutil y se encuentra solo en la producción, pero si puede reproducirlo en su entorno de prueba, debería estar bien.

0

Una práctica técnica si está intentando comparar el rendimiento de dos procesos o declaraciones es seleccionar ambos bloques de sql en el analizador de consultas y ejecutar el plan de consulta. El plan le indicará el porcentaje de costo de cada bloque en relación con el otro. Esto no es una prueba completa. Lo he visto decir que uno era más barato cuando era claramente más caro cuando realmente funcionaba, pero en su mayor parte es un truco agradable y rápido.

+0

también, asegúrese de ACTIVAR ESTADÍSTICAS IO y ejecutar cada bloque. Eso le dirá cuánto IO consume cada uno. –

Cuestiones relacionadas