Ser administrador de una base de datos tiene muchas responsabilidades, y saber lo que sucede en su SQL Server es una de ellas. Ser proactivo y estar alerta de los errores es uno de los rasgos que hace que alguien sea un gran DBA. Y no me refiero solo a que las cosas fallan, que es lo que la mayoría de la gente piensa al recibir alertas; también puede recibir alertas sobre problemas de rendimiento. Dentro de SQL Server, tiene la capacidad de crear Alertas del Agente de SQL Server (a las que llamaré "alertas" de ahora en adelante), y esto se logra fácilmente usando la GUI o T-SQL.
Configuración de alertas del Agente SQL Server
Para usar alertas, debe tener configurado el correo de base de datos y un operador de agente SQL. La mayoría de las instancias de SQL con las que me he encontrado ya tienen el correo de la base de datos configurado para las notificaciones de fallas en el trabajo. Si necesita más información sobre cómo configurar esta función, visite el tema de Libros en línea, "Configurar el correo electrónico de la base de datos".
Una tarea menos conocida es configurar el Operador. Puede crear el operador mediante SSMS o T-SQL. Dentro de SSMS, expanda el Agente SQL Server, haga clic con el botón derecho en Operador y seleccione Nuevo operador. Tendrá un nuevo cuadro de diálogo abierto donde puede dar un nombre al operador y especificar la dirección de correo electrónico para notificar. Prefiero usar un grupo de distribución para las notificaciones por correo electrónico. La mayoría de las empresas tienen más de una persona responsable del entorno SQL y, si especifica un grupo de distribución, todo el equipo puede recibir notificaciones de las alertas. El uso de grupos de distribución también hace que sea mucho más fácil agregar o quitar personas de las alertas.
A continuación se muestra una captura de pantalla de ejemplo del cuadro de diálogo Nuevo operador:
Prefiero usar T-SQL para asegurarme de que la creación del Operador sea parte de una plantilla de compilación del servidor. El código de ejemplo para crear el Operador anterior es el siguiente:
EXEC msdb.dbo.sp_add_operator @name = N'SQL_Alerts', @enabled = 1, @email_address = N'[email protected]';
Una vez que haya configurado el correo de base de datos y el operador, puede crear las alertas y asignarlas al operador.
Si usa SSMS, puede expandir el Agente SQL Server y luego Alertas. De forma predeterminada, no se crean alertas. Si hace clic con el botón derecho y elige Nueva alerta, obtendrá una pantalla similar a la siguiente figura:
Notará que bajo Gravedad, hay 25 códigos de gravedad. Tal como suena, la gravedad del nivel de error describe la importancia del error. La gravedad 10 es informativa, mientras que 19-25 son fatales y querrá recibir una notificación cuando surjan esos errores. Si surgiera un error de gravedad 23, por ejemplo, lo más probable es que tenga daños en una de sus bases de datos. Todos estos errores fatales pueden afectar el rendimiento de su servidor, lo que a su vez afecta la experiencia del cliente.
Hay una alerta adicional que debe crear, para el error 825. El error 825, como lo describe Paul Randal en su publicación de blog, está relacionado con una operación de E/S que SQL Server tuvo que volver a intentar pero que finalmente tuvo éxito (mientras que los errores 823 y 824 indican que se reintentó una operación de reintento de E/S y finalmente falló). Es fundamental conocer el error 825 porque lo alerta sobre problemas de E/S que podrían terminar siendo fatales en el futuro. Cualquier reintento es malo, no debe esperar hasta que no se notifique una operación de E/S. Si comienza a recibir mensajes de error 825, debe comunicarse de inmediato con sus equipos de almacenamiento y hardware.
Puede crear cada una de las Alertas especificando el nombre y seleccionando la gravedad. Para el Error 825, seleccionaría Error y escribiría el número. Al igual que con el Operador, prefiero usar T-SQL. Si puedo crear fácilmente un script para un proceso, entonces es mucho más fácil reutilizarlo e incluirlo como parte de la compilación de un servidor.
A continuación, encontrará el script que he usado en mi estación de trabajo SQL Server 2014 Developer. Este script crea cada una de las alertas y agrega una notificación para la alerta al Operador SQL_Alerts.
EXEC msdb.dbo.sp_add_alert @name = N'Severity 19 Error', @message_id = 0, @severity = 19, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 19 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name = N'Severity 20 Error', @message_id = 0, @severity = 20, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 20 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name=N'Severity 21 Error', @message_id = 0, @severity = 21, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 21 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name = N'Severity 22 Error', @message_id = 0, @severity = 22, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 22 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name = N'Severity 23 Error', @message_id = 0, @severity = 23, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 23 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name = N'Severity 24 Error', @message_id = 0, @severity = 24, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 24 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name = N'Severity 25 Error', @message_id = 0, @severity = 25, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 25 Error', @operator_name = N'SQL_Alerts', @notification_method = 1; EXEC msdb.dbo.sp_add_alert @name = N'Error 825', @message_id = 825, @severity = 0, @include_event_description_in = 0; EXEC msdb.dbo.sp_add_notification @alert_name = N'Error 825', @operator_name = N'SQL_Alerts', @notification_method = 1;
Si ha seguido, tendría configurado el correo de la base de datos, creado un Operador para enviarle un correo electrónico a usted o a un grupo de distribución sobre posibles errores, y Alertas del Agente SQL Server configuradas para Gravedad 19 - 25 y error 825.
Esto es genial. Cada vez que se active una de esas alertas, se enviará un correo electrónico a su equipo. Además de las alertas de eventos, se pueden configurar alertas para una condición de rendimiento, como mencioné en la introducción. Por ejemplo, si el uso de la memoria supera un umbral definido, se podría activar una alerta. Le animo a explorar las diversas alertas de rendimiento y crear aquellas de las que su organización podría beneficiarse. Para encontrar las alertas de condición de rendimiento de SQL Server, en el cuadro de diálogo de alerta nueva, haga clic en el cuadro desplegable para Tipo. Allí verá la alerta de condición de rendimiento de SQL Server en la lista. Una vez que elija esa opción, puede explorar los tipos de objetos en los que puede configurar una alerta de condición de rendimiento.
Si bien asignamos un Operador a la respuesta de alerta, también puede configurar la alerta para ejecutar un trabajo del Agente SQL. Si bien esto le brinda cierta flexibilidad para tener una tarea de respuesta a eventos, no brinda la capacidad de tener alertas condicionales fáciles.
Uso de SQL Sentry para alertas avanzadas
Para alertas más avanzadas, necesita una mejor herramienta. Aquí es donde SQL Sentry puede ayudar. Una de mis funciones favoritas de alerta de SQL Sentry es la capacidad de crear condiciones personalizadas para alertar o actuar cuando algo ha cambiado en el entorno. Por ejemplo, si alguien cambió el valor de memoria mínimo o máximo, modificó maxdop o el umbral de costo para el paralelismo, podría recibir una alerta o incluso iniciar un proceso. Esta función se introdujo en SQL Sentry v8, y Greg Gonzalez (blog | @SQLsensei) escribió sobre ella aquí:"SQL Sentry v8:Alertas inteligentes redefinidas".
Con esta característica, también puede crear condiciones personalizadas para diferentes bases de datos dentro de una sola alerta. Si intentara esto usando las alertas del Agente SQL, tendría que crear diferentes alertas por base de datos.
Otra excelente función de alerta es la capacidad de crear diferentes horarios de alerta. Muchas organizaciones tienen equipos que son responsables durante diferentes partes del día. Algunos pueden tener el DBA de producción responsable durante el día con un Centro de operaciones de red que cubre el turno de noche, y luego una persona de guardia durante los fines de semana. ¿No sería genial poder personalizar un programa de alertas para notificar a los equipos adecuados durante sus horas de responsabilidad?
Puede crear ventanas de alerta (como en una ventana de tiempo) y vincularlas a diferentes alertas o grupos. Esto permite que diferentes alertas estén activas en diferentes momentos y que diferentes grupos sean notificados en diferentes momentos. Esto es realmente genial, ya que permite que sus alertas sigan un cronograma de soporte para que se notifique a las personas correctas. Scott Fallen detalla esta característica en una publicación de blog, "Alertas en un cronograma de llamadas con SQL Sentry", que lo guiará a través de la creación de alertas para varios equipos de guardia.
Otra función de alerta de Performance Advisor y Event Manager es la capacidad de configurar otras respuestas, como ejecutar un proceso de Windows, registrar el evento en una base de datos o registro de errores, enviar una trampa SNMP a otra herramienta de monitoreo como SCOM o incluso eliminar un proceso. . Sus opciones son casi ilimitadas en cuanto a lo que puede predefinir para que suceda cuando ocurra un determinado evento. Las Alertas del Agente SQL no son tan personalizables.
Resumen
Lo importante de esta publicación es que es absolutamente necesario estar alerta de errores y condiciones de rendimiento. Si no tiene una herramienta como SQL Sentry, utilizar SQL Agent Alerts sigue siendo un gran comienzo.
En mis próximas publicaciones, me sumergiré en algunas de estas alertas que afectan el rendimiento y discutiré qué acciones debe tomar cuando surjan.