Azure SQL Database DTU Calculator en español

Si has llegado a esta entrada es porque tienes una base de datos SQL Server que quieres (o piensas) migrar a Azure SQL Database y deseas saber cuales de los planes tendrías que elegir para ello, y sobre todo, cuanto tendrías que invertir. Si es así estas en el sitio correcto.



Azure dispone de 3 planes de alojamiento: Azure SQL Database, Elastic Database y Azure SQL Data Warehouse; en esta entrada me centraré en los dos primeros. 

Cuando migras a la nube de Microsoft desde tu plataforma local (on premise) debes olvidarte de cores y RAM, lo importante son las unidades de rendimiento de base de datos o en sus siglas en inglés DTU, una equivalencia aproximada sería: 1 DTU = 1 transacción por segundo.

¿Cómo calcular cuántas DTU necesita mi base de datos? 

Muy sencillo, existe una herramienta para ello llamada Azure SQL Database DTU Calculator donde te descargas un script PowerShell que monitorizará durante una hora tu consumo de CPU, las lecturas y escrituras por segundo de tus almacenamientos para datos y logs, y el vaciado de registros por segundo de tu base de datos. Estos datos serán exportados a un archivo CSV (no llega a los 300 KB de tamaño) que deberás subir a esta web y, con el número de cores de tu servidor, te analizará y mostrará un informe con el plan qué deberías elegir inicialmente en Azure.

Hasta aquí todo parece muy fácil, el problema es que si tu sistema operativo no está en inglés el script que te descargas no es válido, te dará el siguiente error: Get-Counter : El objeto especificado no se encontró en el equipo

Ojo, este error no sale al ejecutar el script, si se te cierra la ventana de PowerShell es que ha fallado y para ver el error debes editar el script en PowerShell ISE y ejecutarlo allí.

Si tu sistema operativo está en español (España) ya he hecho el trabajo yo por ti, debes sustituir la línea original dónde se asigna la variable $counters por el siguiente contenido:

$counters = @("\Información del procesador(_total)\% de tiempo de procesador",
    "\Disco lógico(e:)\Bytes de lectura de disco/s",
    "\Disco lógico(e:)\Bytes de escritura en disco/s",
    "\Disco lógico(f:)\Bytes de lectura de disco/s",
    "\Disco lógico(f:)\Bytes de escritura en disco/s",
    "\SQLServer:Databases($DatabaseName)\Bytes de registro vaciados/s") 
Si aún así sigues teniendo el mismo error debes hacer lo siguiente.

Lo primero es identificar los grupos de contadores de los que dispone tú servidor, para ello (en PowerShell también) debes escribir el siguiente comando:

get-counter -ListSet *

Esto nos devolverá un montón de datos pero debemos centrarnos en las filas CounterSetName y buscar allí las categorías para el procesador, los discos lógicos y las bases de datos de SQL Server. Para cada categoría debemos buscar entonces los contadores disponibles con el siguiente comando

(get-counter -listset "CounterSetName").paths

En español serían los siguientes:

(get-counter -listset "Información del procesador").paths
(get-counter -listset "Disco lógico").paths
(get-counter -listset SQLServer:Databases).paths

Luego identificar los que solicitan en la web, que en inglés serían: % Processor Time, Disk Reads/sec, Disk Writes/sec, Log Bytes Flushed/sec. Si escoges alguno equivocadamente con suerte dará el siguiente error: Get-Counter : Los datos de una de las muestras de contador de rendimiento no son válidos. Vea la propiedad Status de cada objeto PerformanceCounterSample para asegurarse de que contiene datos válidos, y digo con suerte porque sino estarás generando un informe totalmente inútil.

Una vez se ejecuta el script y se genera el archivo debes sustituir la primera línea del CSV con los nombres en inglés de cada contador.

Con el resultado del informe puedes ir a la calculadora de Azure para determinar tu presupuesto.

Comentarios