Llegan las vacaciones de semana santa y a todos nos gusta desconectar. Aun así, no debemos descuidar la vigilancia sobre nuestros servidores, sobre todo los más críticos. En el mundo de la informática en general y, de la administración de bases de datos en particular, estar al tanto de lo que sucede en nuestros sistemas es crucial. Una actuación sencilla a tiempo nos puede ahorrar una larga intervención para corregir una incidencia en un futuro. Es por esto que la monitorización nativa de SQL Server a través de las alertas del agente es un aliado fundamental de cualquier DBA. En el mercado existen multitud de herramientas que ofrecen una ventana directa al rendimiento y la salud de nuestras bases de datos pero suelen ser costosas y complejas de implementar, mientras que las alertas de SQL, sin ser la solución definitiva, nos brindan una excelente solución básica pero efectiva.
¿Qué son las Alertas del Agente?
Las alertas del agente son un conjunto de respuestas automatizadas que se activan ante eventos específicos en SQL Server. Estos eventos pueden ser desde un simple rendimiento subóptimo hasta errores críticos que requieren atención inmediata. Este sistema de monitorización vigila nuestro SQL Server en busca de los desencadenadores que hayamos definido y, gracias al correo electrónico de base de datos es capaz de hacernos llegar el aviso.
También dispondremos de una opción para ejecutar automáticamente un job que nos será muy útil en caso de tener automatizado un procedimiento de resolución automático para ciertos eventos controlados.
Monitorización con alertas de SQL Server
La monitorización nativa utiliza herramientas integradas en SQL Server para mantener un ojo vigilante sobre los procesos críticos. Esto incluye el seguimiento de bloqueos, la supervisión del rendimiento de las consultas y la detección temprana de posibles problemas.
Configuración Óptima para DBAs
Si estamos familiarizados con o tenemos cierta experiencia en SQL Server, configurar alertas del agente es un proceso familiar y sencillo. Sin embargo, es importante ajustar bien los parámetros que las desencadenan para que las alertas sean significativas y proporcionen información valiosa sin saturarnos con falsos positivos. Un exceso de alertas puede llegar a ser igual a no tener alertas ya que corremos el riesgo de terminar perdiendo información sobre incidentes graves entre tanto aviso.
Caso práctico de configuración de alertas
Las alertas en SQL Server se pueden configurar tanto desde la interfaz gráfica como por script. En el caso de la interfaz gráfica, lo encontraremos colgando del agente de SQL Server en nuestro Management Studio. La ventana de configuración de las alertas tiene este aspecto:



Como veis tenemos un apartado general en el que definiremos el nombre de nuestra alerta y cuál será su desencadenante. Para el tipo “SQL Server error alert”, que es el que más nos interesa, podremos decidir si afecta a una base de datos en concreto o a todas y si se activará por un número de error específico o por todos los que respondan a un nivel de gravedad. También podemos añadir un filtro extra por texto del mensaje. Existen otros tipos de alerta por condiciones de rendimiento o por eventos WMI de Windows. Disponemos también de otros dos apartados en los que configurar la respuesta a estas alertas y sus opciones.
Qué errores monitorizar con alertas
Para poder configurar alertas en base a errores de SQL Server es imprescindible conocer el significado de los niveles de gravedad. Estos niveles van desde el 0 hasta el 25 y se dividen de la siguiente manera. Del 0 al 10 representan mensajes informativos sobre el estado del servidor. Del 11 al 16 son errores que pueden ser corregidos por los usuarios como que un objeto no existe o código SQL mal escrito por ejemplo. A partir de la gravedad 17 si que requerirán nuestra intervención como DBAs y son estos los que os recomiendo monitorizar.
- Gravedad 17 a 19: Indica errores de software que no pueden ser corregidos por el usuario. Como falta de recursos para completar una consulta.
- Gravedad 20 a 24: Indica problemas del sistema y son errores irrecuperables, lo que significa que ya no está en ejecución la tarea del motor de base de datos que esté ejecutando una instrucción o lote.
- Gravedad 25: Error desconocido, aquí irá todo error no controlado por el motor de base de datos.
Además de los errores basados en gravedad yo monitorizo también los códigos de error específicos 823, 824 y 825 que alertan de falta de espacio en disco y el código 1480 que indica un cambio de rol del Always On.
¿Os parecen muchas cosas? No os preocupéis, os dejo aquí el script para crear directamente estas alertas:
USE [msdb]
GO
DECLARE @Sev17 Varchar(200),
@Sev18 Varchar(200),
@Sev19 Varchar(200),
@Sev20 Varchar(200),
@Sev21 Varchar(200),
@Sev22 Varchar(200),
@Sev23 Varchar(200),
@Sev24 Varchar(200),
@Sev25 Varchar(200),
@Error823 Varchar(200),
@Error824 Varchar(200),
@Error825 Varchar(200),
@Error1480 Varchar(200),
@DBMailOperator Varchar(100)
SET @DBMailOperator = 'DBA Team' /* DEFINE AQUI EL NOMBRE DE TU OPERADOR DE MAIL EN EL AGENTE DE SQL */
SET @Sev17 = 'Severity 17'
SET @Sev18 = 'Severity 18'
SET @Sev19 = 'Severity 19'
SET @Sev20 = 'Severity 20'
SET @Sev21 = 'Severity 21'
SET @Sev22 = 'Severity 22'
SET @Sev23 = 'Severity 23'
SET @Sev24 = 'Severity 24'
SET @Sev25 = 'Severity 25'
SET @Error823 = 'Error 823'
SET @Error824 = 'Error 824'
SET @Error825 = 'Error 825'
SET @Error1480 = 'Error 1480'
EXEC msdb.dbo.sp_add_alert @Name=@sev17,
@message_id=0,
@severity=17,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@job_id=N'00000000-0000-0000-0000-000000000000';
EXEC msdb.dbo.sp_add_notification @alert_name=@sev17, @operator_name=@DBMailOperator, @notification_method = 7;
EXEC msdb.dbo.sp_add_alert @Name=@Sev18,
@message_id=0,
@severity=18,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@job_id=N'00000000-0000-0000-0000-000000000000';
EXEC msdb.dbo.sp_add_notification @alert_name=@sev18, @operator_name=@DBMailOperator, @notification_method = 7;
EXEC msdb.dbo.sp_add_alert @Name=@sev19,
@message_id=0,
@severity=19,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@job_id=N'00000000-0000-0000-0000-000000000000';
EXEC msdb.dbo.sp_add_notification @alert_name=@sev19, @operator_name=@DBMailOperator, @notification_method = 7;
EXEC msdb.dbo.sp_add_alert @Name=@Sev20,
@message_id=0,
@severity=20,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@job_id=N'00000000-0000-0000-0000-000000000000';
EXEC msdb.dbo.sp_add_notification @alert_name=@Sev20, @operator_name=@DBMailOperator, @notification_method = 7;
EXEC msdb.dbo.sp_add_alert @Name=@Sev21,
@message_id=0,
@severity=21,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@job_id=N'00000000-0000-0000-0000-000000000000';
EXEC msdb.dbo.sp_add_notification @alert_name=@Sev21, @operator_name=@DBMailOperator, @notification_method = 7;
EXEC msdb.dbo.sp_add_alert @Name=@Sev22,
@message_id=0,
@severity=22,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@job_id=N'00000000-0000-0000-0000-000000000000';
EXEC msdb.dbo.sp_add_notification @alert_name=@Sev22, @operator_name=@DBMailOperator, @notification_method = 7;
EXEC msdb.dbo.sp_add_alert @Name=@Sev23,
@message_id=0,
@severity=23,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@job_id=N'00000000-0000-0000-0000-000000000000';
EXEC msdb.dbo.sp_add_notification @alert_name=@Sev23, @operator_name=@DBMailOperator, @notification_method = 7;
EXEC msdb.dbo.sp_add_alert @Name=@Sev24,
@message_id=0,
@severity=24,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@job_id=N'00000000-0000-0000-0000-000000000000';
EXEC msdb.dbo.sp_add_notification @alert_name=@Sev24, @operator_name=@DBMailOperator, @notification_method = 7;
EXEC msdb.dbo.sp_add_alert @Name=@Sev25,
@message_id=0,
@severity=25,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@job_id=N'00000000-0000-0000-0000-000000000000';
EXEC msdb.dbo.sp_add_notification @alert_name=@Sev25, @operator_name=@DBMailOperator, @notification_method = 7;
EXEC msdb.dbo.sp_add_alert @name=@Error823,
@message_id=823,
@severity=0,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@job_id=N'00000000-0000-0000-0000-000000000000'
EXEC msdb.dbo.sp_add_notification @alert_name=@Error823, @operator_name=@DBMailOperator, @notification_method = 7;
EXEC msdb.dbo.sp_add_alert @name=@Error824,
@message_id=824,
@severity=0,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@job_id=N'00000000-0000-0000-0000-000000000000'
EXEC msdb.dbo.sp_add_notification @alert_name=@Error824, @operator_name=@DBMailOperator, @notification_method = 7;
EXEC msdb.dbo.sp_add_alert @name=@Error825,
@message_id=825,
@severity=0,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@job_id=N'00000000-0000-0000-0000-000000000000'
EXEC msdb.dbo.sp_add_notification @alert_name=@Error825, @operator_name=@DBMailOperator, @notification_method = 7;
EXEC msdb.dbo.sp_add_alert @name=@Error1480,
@message_id=1480,
@severity=0,
@enabled=1,
@delay_between_responses=60,
@include_event_description_in=1,
@job_id=N'00000000-0000-0000-0000-000000000000'
EXEC msdb.dbo.sp_add_notification @alert_name=@Error1480, @operator_name=@DBMailOperator, @notification_method = 7;
Conclusión
Con una configuración adecuada y un uso correcto de las alertas del agente, podemos asegurar que nuestros sistemas de bases de datos operen con la máxima eficiencia. La monitorización nativa no es solo una herramienta, es una parte integral de nuestra estrategia proactiva para mantener la salud de SQL Server. Es cierto que, al usar una monitorización en local, se nos escaparán eventos más graves como la caída del propio servidor pero es un buen punto de partida y, sobre todo, es mejor que no tener nada.
Espero que este artículo te haya sido útil y que te ayude a tener mayor control sobre tus servidores SQL Server. Te animo a investigar más y definir nuevas alertas que puedan resultarte interesantes. Una vez hecho, puedes dejarlo en los comentarios y, entre todos, seguro que aprendemos algo nuevo. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!


[…] este apartado no nos vamos a extender mucho, ya le dedicamos un artículo entero a esta opción donde os compartí como hago yo para configurarlo. En resumen, el Agente SQL […]
[…] Mi recomendación en este apartado es que configuréis alertas para los errores más críticos como os expliqué en este otro artículo. […]