Menu

Menu

Automatiza la optimización de tu base de datos con Azure Automation

triangle triangle

Azure Automation nos permite automatizar las tareas de administración en la nube que realiza con frecuencia y que requieren mucho tiempo, además de ser proclives a errores. El servicio Automatización de Azure le ayuda a pasar más tiempo centrado en el trabajo que agrega un valor empresarial. Con los scripts y flujos de trabajo de Windows PowerShell, conocidos como Runbooks, podemos trabajar de un modo más inteligente, ya que permiten controlar la creación, la implementación, la supervisión y el mantenimiento de los recursos de Azure y las aplicaciones de terceros.

En esta entrada me centraré en describir las acciones y tareas que realiza el script que os presentaré a continuación, para para saber como configurarlo en Azure Automation os remito al blog de nuestro compañero David Rodriguez Hernández en el que explica detalladamente los pasos necesarios para su implementación.

Para realizar este script nos ayudamos de PowerShell Workflows que nos permite ejecutar secuencias de flujos de trabajo, permitiendo a los administradores y desarrolladores utilizar las funcionalidades de automatización y la facilidad de Windows PowerShell.

En un script, el script completo se ejecuta en el mismo espacio de ejecución, el entorno operativo que define qué comandos, variables y otros elementos que están disponibles. En un flujo de trabajo, cada actividad del flujo de trabajo puede ejecutarse en un espacio de ejecución diferente. Las variables que se crean en el nivel superior de todo el flujo de trabajo están disponibles en todo el flujo de trabajo, pero no están disponibles para el flujo de trabajo completo.

Este script nos permite indexar las tablas de una base de datos dependiendo del porcentaje de fragmentación, además de modificar el tier de la base de datos para que se ejecute de forma más rápida y fluida, además del envió de un log al finalizar la tarea.

Centrándonos en las acciones que ejecuta el script podemos diferenciarlas en 4 partes o secciones:


  1.  Aumentaremos el nivel de rendimiento de la base de datos al tier que deseemos para que el indexado se realice una forma rápida y fluida.

  2.  Comprobamos el nivel de fragmentación de la base de datos y realizamos el indexado.

  3.  Restauramos el nivel de rendimiento de la base de datos al tier que hayamos especificado por parámetros de entrada.

  4.  Si queremos enviar una notificación por email con los errores que se han producido, además del estado del nivel de rendimiento que está actualmente la base de datos.

Previamente debemos crear en nuestra suscripción las credenciales de acceso a la base de datos y al servidor SMTP.

Vamos a detallar los parámetros de entrada que necesitamos para ejecutar nuestro script:

1. SqlServerName

Nombre del servidor de la base de datos, el propio script añade la ruta completa al nombre.

2. DatabaseName

Nombre de la base de datos a indexar.

3. SQLCredentialName

Identificador de las credenciales que debemos haber creado previamente con los datos de acceso a la base de datos.

4. Edition

Edición de Azure SQL Database para realizar el indexado (Basic, Standard, Premium)

5. PerfLevel

Nivel de rendimiento de Azure SQL Database para realizar el indexado (Basic, S0, S1, S2, P1, P2, P3)

6. FinalEdition

Edición de Azure SQL Database para reestablecer después de realizar el indexado (Basic, Standard, Premium)

7. FinalPerfLevel

Nivel de rendimiento de Azure SQL Database para reestablecer después de realizar el indexado (Basic, S0, S1, S2, P1, P2, P3)

8. FragPercentage - Opcional

Porcentaje de fragmentación que comprobamos en las tablas para realizar el indexado. Por defecto un 10%

9. SqlServerPort - Opcional

Puerto de la conexión al SQL Server. Por defecto 1433

10. RebuiltOffline - Opcional

Parámetro para especificar si falla el indexado de forma online lo intente offline. Por defecto falso

11. Table – Opcional

Si queremos indexar solo una tabla específica. Por defecto indexa todas las tablas.

12. SMTPServer – Opcional –Obligatorio si queremos enviar la notificación.

Dirección del servidor de SMTP para realizar el envío de la notificación. Por defecto no se envía ningún email si este campo no tiene contenido.

13. SMTPCredentials – Opcional –Obligatorio si queremos enviar la notificación.

Identificador de las credenciales que debemos haber creado previamente con los datos de acceso al servidor SMTP.

14. FromMail – Opcional –Obligatorio si queremos enviar la notificación.

Email del emisor.

15. ToMail – Opcional –Obligatorio si queremos enviar la notificación.

Email que va a recibir la notificación.

 

Cambiando el tier de la base de datos.

En esta parte del script realizamos el cambio de tamaño del servidor de SQL, nos centraremos en dos comandos, Set-AzureSqlDatabase que nos permitirá modificar la configuración de nuestro SQL y Get-AzureSqlDatabase para obtener las características de actuales de la base de datos.

Utilizamos el bucle para comprobar el cuándo se ha completado el cambio de tier de la máquina para continuar con la ejecución.

 

Comprobando el nivel de fragmentación de la base de datos e indexado.

En este paso analizaremos la fragmentación de las tablas de la base datos con las siguientes líneas de código, utilizando el objeto connector que previamente habremos creado con los datos de conexión al servidor.

Tras hacer la comprobación realiza el indexado de cada una de las tablas, con el comando de SQL que vemos resaltado en la imagen siguiente.

Envío de notificación al finalizar el script

Si queremos que al finalizar nuestra tarea automatizada nos informe enviándonos un email con el log que ha generado el script, tendremos que rellenar cada uno de los parámetros designados para esta tarea.

Send-MailMessage -To "$Using:ToMail" -Subject $subject -Body "$Using:Body" -UseSsl -Port 587 -SmtpServer "$Using:SMTPServer" -From "$Using:FromMail" -BodyAsHtml -Credential $Cred

Para descargar este script os remito al repositorio de Intelequia en Github en el cual podréis descargarlo.