Como hacer pruebas Stress de disco para SQL Server

Como DBA sabemos que la performance de los discos es fundamental para que nuestro motor de base de datos SQL Server no tenga problemas de performance.

Primero vamos a hacer un simple repaso de performance de disco con las siguientes definiciones:

IOPS: Son la cantidad de operaciones de entrada / salida por segundo que procesa un disco.

Latencia: Es el tiempo de respuesta para poder procesar las operaciones (IOPS), la misma se suele medir en ms (milisegundos)

Para un motor de base de datos OLTP Microsoft nos recomienda no superar una latencia de 20ms y para un DW unos 40ms.

Patrones de I/O: Estos patrones son diversos según el tipo de aplicación, no es lo mismo un filesystem que una base de datos relacional. En el siguiente cuadro vamos a ilustrar los patrones de I/O de SQL Server (los cuales no difieren mucho de cualquier otra base de datos relacional)

También sabemos que por lo general para aumentar la capacidad de IOPS vamos a necesitar más discos .

En este articulo vamos a ver cómo podemos hacer una prueba de stress sobre nuestros sistemas de discos para así poder determinar la capacidad de IOPS para SQL Server de los mismos.

Es importante recordar que deberíamos dimensionar la capacidad de IOPS para que luego los técnicos de HW / Storage nos armen la solución adecuada, luego de eso nosotros podemos hacer una prueba de stress para comprobar si lo solicitado cumple o no con los requerimientos

Herramienta a utilizar (DiskSpd)

Microsoft desde hace varios años nos proporcionó distintas herramientas para poder realizar esta tarea, hasta hace un tiempo podíamos usar SQLIO (deprecada), SQLIOSIM o SQLIOStress (deprecada), pero desde ya hace unos dos años fue reemplazadas por Diskspd la cual vamos a utilizar en este documento.

Diskspd es una herramienta que se corre desde la línea de comandos y no necesita tener instalado en el servidor nada adicional (ni SQL Server). Por lo cual lo primero que haremos es bajar la herramienta y descomprimir el archivo. Ahí veremos luego que tenemos dos versiones (32 y 64 bits) que dependiendo del SO usaremos uno u otro (hoy día ya casi no quedan SO en 32 bits con lo cual usaremos seguramente la versión de 64).

Como haremos los test

Lo que estamos buscando es poder estresar a nuestro storage para así poder determinar cuál es su capacidad de IOPS menos a 20ms. Para ello debemos tener algunas consideraciones

  • Tratar de no usar la cache del Storage
  • Emular un OLTP (podemos considerar 80% lectura y 20% escritura)
  • Usar un tamaño de archivo similar a su base de datos (ideal que sea cache del storage x 4 como mínimo)

Lo que haremos con diskspd es ir haciendo pruebas de a una aumentando en cada una de ellas la carga de IOPS para poder determinar la capacidad de nuestro storage.

Parámetros de Diskspd

Esta herramienta tiene un número importante de parámetros que podemos utilizar, pero nosotros según nuestra experiencia usaremos los siguientes:

-d : Duración de la prueba medida en segundos (usaremos 300 segundos para todas las pruebas)

-c: Tamaño del archivo (usaremos 512GB en nuestro caso)

-r: Lecturas Random

-w20: Escritura 20% y 80% lectura

-t: Cantidad de thread (ideal usar misma cantidad de cores)

-o: Request de I/O (carga: iremos aumentando este valor para buscar la carga máxima del Storage)

-b8k: Usaremos bloques de 8k

-h: Deshabilitamos el cache de software & Hardware

-L: Obtendremos los valores de latencia

Nota: Para poder ejecutar diskspd debemos abrir una consola CMD con privilegios de administrador

Código de ejecución:

Con los parámetros anteriormente mencionados armaremos las siguientes ejecuciones (en este caso haremos las pruebas sobre la unidad G:\

DiskSpd.exe -d300 -c512G -r -w20 -t4 -o1 -b8k -h -L g:\test.dat > oltp_o1.txt
DiskSpd.exe -d300 -c512G -r -w20 -t4 -o2 -b8k -h -L g:\test.dat > oltp_o2.txt
DiskSpd.exe -d300 -c512G -r -w20 -t4 -o4 -b8k -h -L g:\test.dat > oltp_o4.txt
DiskSpd.exe -d300 -c512G -r -w20 -t4 -o8 -b8k -h -L g:\test.dat > oltp_o8.txt

Interpretando los resultados

En cada ejecución diskspd nos arrojara un resultado detallado de las pruebas, en nuestro caso lo estaremos guardando en los archivos .txt

La siguiente imagen muestra uno de los resultados, los valores que nos importan a nosotros son la cantidad de IOPS y la latencia promedio

Los resultados de nuestro ejemplo

El siguiente cuadro muestra los resultados de las distintas ejecuciones de nuestros test.

Como podemos observar en nuestros test esta LUN del storage soporto una carga máxima de 500 IOPS, esto lo podemos determinar ya que al ir haciendo las distintas pruebas aumento la latencia (tiempo de respuesta) y se quedaron fijos los IOPS, ese es el punto de saturación del mismo.

Conclusiones finales

La performance del disco es fundamental para cualquier DBA, poder contar con herramientas como esta que nos permiten hacer un stress es de vital importancia.

2 comments

  1. Buen dia estimado. Esta operación de stress de disco la recomendas que hagamos solamente ANTES de instalar el SQL Server o también podemos usarla como herramienta de resoluciones de problemas de disco?

Leave a Reply