¿Cómo mido mejor el rendimiento de la consulta?


19

Tengo 2 procedimientos almacenados, donde el segundo procedimiento almacenado es una mejora del primero.

Estoy tratando de medir exactamente cuánto es una mejora.

1 / La medición clock timeno parece ser una opción, ya que obtengo diferentes tiempos de ejecución. Peor aún, a veces (rara vez, pero sucede) el tiempo de ejecución del segundo procedimiento almacenado es mayor que el tiempo de ejecución del primer procedimiento (supongo que debido a la carga de trabajo del servidor en ese momento).

2 / Include client statisticstambién proporciona resultados diferentes.

3 / DBCC DROPCLEANBUFFERS, DBCC FREEPROCCACHEson buenos, pero la misma historia ...

4 / SET STATISTICS IO ONpodría ser una opción, pero ¿cómo podría obtener una puntuación general ya que tengo muchas tablas involucradas en mis procedimientos almacenados?

5 / Include actual execution planpodría ser una opción también. Obtengo un estimated subtreecost0.3253 para el primer procedimiento almacenado y 0.3079 para el segundo. ¿Puedo decir que el segundo procedimiento almacenado es un 6% más rápido (= 0.3253 / 0.3079)?

6 / ¿Usando el campo "Lecturas" de SQL Server Profiler?

Entonces, ¿cómo puedo decir que el segundo procedimiento almacenado es x% más rápido que el primer procedimiento, sin importar las condiciones de ejecución (la carga de trabajo del servidor, el servidor donde se ejecutan estos procedimientos almacenados, etc.)?

Si no es posible, ¿cómo puedo probar que el segundo procedimiento almacenado tiene un mejor tiempo de ejecución que el primer procedimiento almacenado?

Respuestas:


17

Me gusta usar la herramienta gratuita SQLQueryStress al comparar un escenario anterior y posterior. Con SQLQueryStress puede ejecutar cada procedimiento almacenado tantas veces como desee y obtener las estadísticas promedio totales de todas las ejecuciones.

Por ejemplo, podría ejecutar cada procedimiento almacenado 100 veces y luego usar las estadísticas para respaldar sus mejoras. "Más de 100 ejecuciones, mis mejoras ahorran un total de 30 segundos y el proceso almacenado hace 1500 lecturas menos por ejecución". Creo que entiendes la idea.

Si hay parámetros en el proceso almacenado, siempre es una buena idea verificar que sus mejoras funcionen con muchos conjuntos diferentes de parámetros. SQLQueryStress hace algunas cosas interesantes al permitirle sustituir parámetros en su consulta para obtener una mejor idea general de cómo podría estar funcionando el proceso almacenado.

Documentación de SQLQueryStress: http://www.datamanipulation.net/sqlquerystress/documentation/documentation.asp

SQLQueryStress



3

Cuando haya recopilado tiempos de ejecución durante un par de días para sus dos procedimientos almacenados, le recomendaré que use esta página de inicio

http://www.evanmiller.org/ab-testing/t-test.html

para ver si en realidad son diferentes.

La diferencia del 6% no suena tanto cuando se trata de mejoras de los procedimientos almacenados. He llegado a esperar dos órdenes de magnitud de mi colega, y pretendo estar decepcionado si solo logra una orden de magnitud ...

No tiene que usar la página de inicio de EvanMiller para demostrar que su solución funciona más rápido.

También instalaría SQLSentrys (editar :) Plan Explorer desde http://www.sqlsentry.com/ ya que esta es una herramienta mucho mejor para comparar planes de ejecución.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.