Usando la calculadora de DTU para “Azure SQL database”

Aquellas personas que estén pensando en migrar algún servicio a Azure seguramente se habrán encontrado con multitud de dudas no sólo técnicas si no, también, económicas. Precisamente, es este aspecto uno de los más tenidos en cuenta a la hora de migrar nuestros servicios a una plataforma de cloud como Azure; El poder contar con una infraestructura a un coste muy inferior al que nos supondría mantener una infraestructura similar en nuestras instalaciones.

Sin embargo, si es la primera vez que vamos a utilizar Azure, nos encontraremos con la difícil tarea de pronosticar el coste que nos supondrá. Para intentar tener una aproximación del coste nos encontraremos no sólo con una multitud de niveles de servicio con diferentes precios si no, también, con conceptos que ni siquiera no serán conocidos. Éste es el caso de las DTU o “unidades de transacción de bases de datos” que no es más que un concepto que Microsoft se ha inventado para facturar el servicio de bases de datos SQL de Azure.

Para realizar una aproximación del coste mensual para un servicio de bases de datos SQL de Azure deberemos saber, primero, qué necesidad de DTUs tendremos.

Microsoft explica cómo calcular los DTUs que necesitaremos aprovisionar en nuestro servicio Azure mediante la medición de ciertos indicadores de rendimiento en nuestro actual servidor de base de datos. Para facilitar esta labor Justin Henriksen desarrolló algunos scripts que ejecutándolos en el servidor del que queremos obtener los indicadores de rendimiento nos generarán un fichero CSV con los datos recolectados. Una vez generado dicho fichero, lo podremos “subir” a la web  Azure SQL Database Calculator para que nos muestre un informe que nos indicará, entre otros datos, la cantidad de DTUs que necesitaremos aprovisionar en el servicio SQL de Azure. De esta manera podremos realizar una estimación de coste para este servicio.

El problema de los scripts es que los indicadores están configurados en inglés y, si el sistema operativo de nuestro servidor está en otro idioma, tendremos que cambiar los nombres de los indicadores para que se ajusten a los que existen en nuestro servidor.

El script que se puede obtener de la web Azure SQL Database Calculator está disponible para powershell o como ejecutable. En el caso de powershell los textos a cambiar están dentro del propio script y en el caso del ejecutable los textos están dentro de un fichero de configuración (.config).

Si ejecutamos el script tal cual obtendremos la siguiente mensaje de error:

Processor doesn't exist. Try running perfmon.exe to identify the correct Processor category.

Lo que nos está diciendo es que no encuentra el contador de rendimiento del procesador del que intenta recoger los datos.

Nos da una pista: Ejecutar el monitor de rendimiento mediante el comando “perfmon.exe”.

En el texto que sigue mostraré cómo obtener el nombre de los indicadores en el idioma del servidor mediante el monitor de rendimiento. En el ejemplo utilizo el fichero de configuración (.config) del ejecutable pero para el script de powershell se puede seguir el mismo método.

Si abrimos con un editor de textos el fichero de configuración veremos el siguiente contenido:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <appSettings>
 <!-- PROCESSOR COUNTER -->
 <add key="ProcessorCategory" value="Processor"/>
 <add key="ProcessorInstance" value="_Total"/>
 <add key="ProcessorCounter" value="% Processor Time"/>
 <!-- DISK COUNTERS -->
 <add key="DiskCategory" value="LogicalDisk"/>
 <add key="DiskInstance" value="_Total"/>
 <add key="DiskCounter1" value="Disk Reads/sec"/>
 <add key="DiskCounter2" value="Disk Writes/sec"/>
 <!-- SQL COUNTER -->
 <add key="SqlCategory" value="SQLServer:Databases"/>
 <add key="SqlInstance" value="_Total"/>
 <add key="SqlCounter" value="Log Bytes Flushed/sec"/>
 <!-- SECONDS TO WAIT FOR COLLECTING COUNTERS -->
 <add key="SampleInterval" value="1"/>
 <!-- TOTAL NUMBER OF SAMPLES TO COLLECT -->
 <add key="MaxSamples" value="3600"/>
 <!-- DISK LOCATION OF THE OUTPUT FILE -->
 <add key="CsvPath" value="C:\temp\sql-perfmon-log.csv"/>
 </appSettings>
 <startup>
 
 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
</configuration>

Vemos que hay tres secciones en las que se encuentran las claves de los contadores de rendimiento.

Para obtener el nombre correcto de los indicadores abriremos el monitor de rendimiento en el servidor en el que queremos ejecutar el script mediante el comando “perfmon.exe”. Para hacer esto necesitaremos permisos de administrador.

Una vez abierto el monitor, monitorrendimiento

Pulsaremos en la cruz verde plusmonitorrendimiento para agregar un contador a nuestro monitor. Al realizar esto se abrirá un listado que nos mostrará todos los posibles contadores que pueden ser monitorizados.

Tendremos que buscar los que nos interesan para recoger el texto en el idioma del servidor. Por ejemplo, para el contador “% Processor Time” que se encuentra dentro de la categoría “Processor”, nuestro sistema mostrará lo siguiente:

plusmonitorrendimientocounter

Es decir, la categoría se llamará “Procesador” y el contador “% de tiempo de procesador”. Éstos serán los textos que deberemos indicar en el fichero de configuración.

Como ejemplo, pongo como quedaría el fichero de configuración con los indicadores en español y teniendo en cuenta que la máquina en la que se ha ejecutado tiene instalado un SQL Server Express.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <appSettings>
 <!-- PROCESSOR COUNTER -->
 <add key="ProcessorCategory" value="Procesador"/>
 <add key="ProcessorInstance" value="_Total"/>
 <add key="ProcessorCounter" value="% de tiempo de procesador"/> 
 <!-- DISK COUNTERS -->
 <add key="DiskCategory" value="Disco lógico"/>
 <add key="DiskInstance" value="_Total"/>
 <add key="DiskCounter1" value="Lecturas de disco/s"/>
 <add key="DiskCounter2" value="Escrituras en disco/s"/>
 <!-- SQL COUNTER -->
 <add key="SqlCategory" value="MSSQL$SQLEXPRESS:Databases"/>
 <add key="SqlInstance" value="_Total"/>
 <add key="SqlCounter" value="Log Bytes Flushed/sec"/>
 <!-- SECONDS TO WAIT FOR COLLECTING COUNTERS -->
 <add key="SampleInterval" value="1"/>
 <!-- TOTAL NUMBER OF SAMPLES TO COLLECT -->
 <add key="MaxSamples" value="3600"/>
 <!-- DISK LOCATION OF THE OUTPUT FILE -->
 <add key="CsvPath" value="C:\temp\sql-perfmon-log.csv"/>
 </appSettings>
 <startup>
 
 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
</configuration>

Una vez hechos los cambios en el fichero de configuración y tras ejecutar el script, deberás ver algo como lo siguiente:

sqlperfdata

Además en el directorio “c:\temp\” debería existir un fichero CSV llamado “sql-perfmon-log.csv”. Si os habéis fijado en el fichero de configuración habréis podido comprobar que tanto la ruta como el nombre del fichero de salida se configuran en una de las claves: “add key=”CsvPath” value=”C:\temp\sql-perfmon-log.csv”/>”

Con este fichero ya estaremos en disposición de subirlo a la calculadora de DTUs para obtener el informe. Primero indicaremos el número de núcleos de procesador del servidor en el que hemos ejecutado el script y subiremos el archivo CSV tras lo cual, pulsando en Calculate accederemos al informe que nos mostrará los resultados.

calculate

Referencias:

 

 

 

Anuncios