Cómo no estresarse con SQLQueryStress
Hay herramientas esenciales en la vida de un DBA y para mi una de esas es esta: SQLQueryStress. Por muchos años que pasen (porque ya tiene solera la herramienta) siempre llega el momento en el que acabas teniendo que recurrir a ella y por ello escribo hoy sobre ella.
¿Qué es?¿Para qué sirve?
SQLQueryStress es una herramienta gratuita que se usa para probar el rendimiento y la carga de consultas SQL en Microsoft SQL Server.
Permite simular carga sobre una base de datos SQL Server con el fin de medir el rendimiento de consultas o procedimientos almacenados. Y algunos de los escenarios útiles son:
- Pruebas de rendimiento
- Pruebas de carga
- Optimización de consultas
- Diagnóstico de cuellos de botella
Un poco de historia…
Allá por el 2006, Adam Machanic se encontraba escribiendo un libro y creo esta herramienta para los ejemplos que contenía dicho libro. Es muy interesante cómo cuenta él la historia aqui: desde la sorpresa que se llevó de que algo tan simple se volviera tan popular a cuando creyó que había perdido el código… vamos que recomiendo su lectura.
Pero la historia no acabó ahí, luego Erik Ejlskov Jensen recogió el testito de Adam (que cedió el código original) y creo el GitHub donde se sigue manteniendo la herramienta (ver)
Bueno, y ahora veamos cómo funciona.
Instalación
En mi caso la bajé desde la Microsoft Store

Pero cuando he intentado replicarlo para este artículo no lo he encontrado. ¿Entonces? ¡Que no cunda el pánico! Se puede descargar desde el GitHub.

Se descarga el archivo .zip y cuando se descomprime es tan simple como abrirla/ejecutarla. Y si se quiere, como cualquier otra aplicación, se puede anclar al menú o a la barra de tareas.
Configuraciones posibles
Cuando se abre la aplicación, se muestra esta ventana donde se puede configurar las condiciones de la prueba.

Las opciones que hay son
- Number of iterations: Nº de veces que se quiere que se ejecute el bucle
- Number of Threads: Nº de hilos que se quiere lanzar. Máximo 200
- Delay between queries (ms): Millisegundos que se quiere que espere la query entre iteraciones
Además de estas opciones, se encuentran los siguientes botones que llevarán a ventanas que permiten más configuraciones y son bastante intuitivos.
Botón Database
Para configurar la conexión con la base de datos.

Server
Cadena de conexión del servidor
Authentication
- Integrated Authentication: autenticación Windows con la que conectarse.
- SQL Server Authentication: usuario y pass de Sql server. Al seleccionarlo, es cuando se habilitan los textbox de Login y Password
- Login: para poner el login de sql server
- Password: para poner el pass del login de sql server
- Default Database:Selecciona la BBDD a la que conectarse
- Share Connection Settings:
- Si se activa esto, es para que la consulta de Paremetrización comparta la configuración de BBDD.
- Si no se activa, se tiene que volver a configurar el Server, la Authentication,
Botón Parameter Substitution
Como pueden configurarse las iteraciones, se puede configurar para que cada iteración se haga con
parámetros distintos, desde esta ventana.

Por ejemplo, si se quisiera ejecutar esta llamada a un procedimiento

Se necesitaría configurar el valor de @Id y con «Parameter Substitution» se puede configurar para que cada llamada fuera distinta. ¿Cómo?
- Al pulsar el botón saldría la siguiente ventana

- A continuación se escribe la query que devolverá los distintos valores que se quieren utilizar

- Se pulsa «Get Columns» para que el programa recoja los parámetros de la consulta original y así poder asignar el parámetro con el valor correspondiente de esta consulta.

En este ejemplo, habria que asignar @id a la columna con nombre BusinessEntityID.
¿Cómo funciona?
Se lanza la query ahí indicada y luego coge una fila por cada una de las iteraciones.
Si la query devuelve por ejemplo los siguientes valores:
| BusinessEntityID |
| 1 |
| 2 |
| 3 |
Y se ha configurado para que haga 10 iteraciones, el resultado será:
| BusinessEntityID |
| 1 |
| 2 |
| 3 |
| 1 |
| 2 |
| 3 |
| 1 |
| 2 |
| 3 |
| 1 |
y si fueran sólo 2 iteraciones, sería:
| BusinessEntityID |
| 1 |
| 2 |
Es decir, si en la consulta de parametrización se obtienen menos filas que el nº de
iteraciones, se repetirán los valores.
Menú File
Options
Configuraciones varias de cómo establecer conexión con la BBDD

Save Settings
Permite guardar un Json con la prueba que se está haciendo para poder repetirla otro día.
Load Settings
Permite leer un Json con una prueba (guardada antes)
Save Brenchmark
Guarda los datos del Brenchmark en 3 posibles formatos: csv, Text, Clipboard.
- TestId
- TestStartTime
- ElapsedTime
- Iterations
- Threads
- Delay
- CompletedIterations
- AvgCPUSeconds
- AvgActualSeconds
- AvgClientSeconds
- AvgLogicalReads
Exit
Salir de la aplicación
Conclusión
SQLQueryStress es una herramienta sencilla pero a su vez muy completa que ayuda en las tareas de optimización, que una vez se comprende cómo funciona, es una gran aliada y espero que con esta pequeña guía haya ayudado a comprenderla mejor.
