Cómo monitorear automáticamente la disponibilidad de SQL Server

Vista general de la disponibilidad de SQL Server

El componente principal de SQL Server es el servicio del Motor de la Base de Datos. Es identificado con el servicio de Windows llamado MSSQLSERVER (sqlservr.exe) para la instancia por defecto, y para la instancia con nombre, el nombre personalizado es adjuntado al nombre del servicio, por ejemplo, MSSQLTESTDEPT.

El Motor de la base de datos juega un rol importante en administrar y manejar la base de datos relacional y el mantenimiento dentro de SQL Server en sí mismo. Aunque hay dos otros servicios opcionales, SQL Server Agent y SQL Server Browser, el servicio del motor de la Base de Datos es suficiente para el trabajo de cada día con SQL Server.

Inspeccionando el estado

Hay muchos métodos para determinar y monitorear la disponibilidad del servicio de SQL Server, y por cuánto tiempo está funcionando, para monitorearlo continuamente y proveer estabilidad a SQL Server. Esto puede ser hecho manualmente o programáticamente.

Services.msc

Abra Services.msc, y verifique el estado del servicio MSSQLSERVER (y otros servicios también), como en la imagen de abajo:

Administrador de Configuración de SQL Server

Revise la lista de servicios relacionados a SQL Server y verifique su estado a través del Administrador de Configuración (Configuration Manager)de SQL Server:

Verificando la disponibilidad con T-SQL

  • • Con el procedimiento almacenado xp_servicecontrol
EXEC xp_servicecontrol N'querystate'
	,N'MSSQLSERVER'

Este procedimiento almacenado mostrará el estado actual del servicio como resultado:

Determinando la causa de los cambios

En monitoreo, la disponibilidad de SQL Server puede ser identificada por el estado en línea online o fuera de línea offline, simplemente verificando si el servicio del Motor de la Base de Datos está corriendo o no.

Hay numerosas razones por las que el servicio puede parar. Puede ser parado a propósito o por algún evento externo, llevando a que el servicio se apague.

La razón más común para que SQL Server pare es la información de inicio de sesión incorrecta. Esto pasa cuando la cuenta de dominio de SQL Server es cambiada, y la información de inicio de sesión no es actualizada después de ese cambio. El servicio puede ser iniciado pero, sin credenciales válidas, colapsará inesperadamente o se estancará en el estado “stopping” (parando). La solución para esto es actualizar oportunamente la información de inicio de sesión en las propiedades del servicio específico del Motor de la Base de Datos (dentro de Services.msc), ya sea que la cuenta Local System esté elegida, o se usa una cuenta de usuario específica de Windows:

A diferencia de otros servicios relacionados con SQL Server, el servicio del Motor de la Base de Datos puede ser pausado, lo cual no causará una interrupción de ninguna transacción activa a terminar, pero el servicio no permitirá inicializar ninguna nueva transacción en la instancia de SQL Server en particular.

Cambiando el estado

El servicio del Motor de la Base de Datos puede ser pausado, parado o iniciado nuevamente dentro de SQL Server Management Studio haciendo clic derecho en la instancia deseada en Object Explorer:

Note que el servicio MSSQLSERVER no puede ser encendido initially desde SSMS. Si el servicio es parado, SSMS no podrá conectarse a esa instancia particular y lanzará un error.

Otra información

La información como los tiempos de creación de objetos temporales e inicios de sesión puede ayudarnos a añadir contexto e información a la disponibilidad de SQL Server. La siguiente puede ser información útil para revisar la disponibilidad de sus SQL Servers.

Determinar el tiempo de creación de tempdb

Use este script en una instancia deseada de SQL Server para determinar de manera precisa el tiempo de inicio de sesión real del servicio del Motor de la Base de Datos, porque la base de datos de sistema tempdb es recreada cada vez que el servicio de Motor de la Base de Datos se inicia (por ejemplo, después de iniciar el sistema).

SELECT create_date
FROM sys.databases
WHERE NAME = 'tempdb'

Recolectar información detallada con la vista sys.dm_server_services

SELECT servicename AS ServiceName
	,startup_type_desc AS StartupType
	,status_desc AS ServiceStatus
	,process_id AS ProcessID
	,last_startup_time AS LastStartupTime
	,service_account AS ServiceAccount
FROM sys.dm_server_services
WHERE servicename = 'SQL Server (MSSQLSERVER)'

Este script mostrarla información detallada del servidor SQL Server en particular, incluyendo el tipo de inicio de sesión, el estado del servicio, el ID del proceso, el tiempo del último inicio de sesión y la cuenta usada (cuenta de Usuario de Windows):

Note que, en la sentencia WHERE, servicename debería contener el nombre completo del servicio, como se muestra.

Obtener la lista de procesos relacionados con SQL Server con PowerShell

Use este script PowerShell para obtener todos los servicios que contienen la cadena “SQL Server (”, y revise sus estados (corriendo o parado):

Get-Service -computername <name_of_the_machine> | Where-Object{$_.DisplayName -like "SQL Server (*"}

El resultado debería aparecer como esto:

Para obtener información desde la máquina remota, cambie la variable –-computername a la deseada.

Monitoreando la disponibilidad de SQL Server con ApexSQL Monitor

Entre los otros contadores especiales de desempeño como SQL Server Agent status y System availability, ApexSQL Monitor incorpora la característica llamada SQL Server availability, que monitorea el estado del servicio de SQL Server, muestra la información de si SQL Server está en línea o no, y lanza alertas en los momentos cuando SQL Server pasa de un estado fuera de línea a uno en línea, y viceversa.

Información básica

Cuando Todas las Instancias son elegidas en el panel izquierdo, la lista de instancias aparecerá en el panel ApexSQL Monitor Group. Si el estado de disponibilidad de alguna instancia cambia mientras tanto, la notificación de alerta será mostrada bajo el campo SQL Server:

También, cuando una instancia específica es seleccionada, la vista general de SQL Server mostrará información adicional acerca del estado de SQL Server (está en línea o no) y el inicio de sesión:

En la vista Dashboard, la información acerca del estado actual del servicio y su tiempo de corrida están presentes (marcados arriba). Adicionalmente, hay un gráfico circular llamado Server, y, en este caso, el ratio es 89% disponible/11% no disponible.

Alertas de disponibilidad

Las alertas relacionadas al cambio de la disponibilidad de SQL Server de no disponible a disponible, y viceversa, pueden ser revisadas yresueltas en la vista Alerts, si es necesario. También, las alertas resueltas pueden ser documentadas con la característica Reports(debajo de la pestaña Resolved alerts).

Como puede verse, hay dos valores en la escala, Online y Offline. El gráfico presenta el momento cuando SQL Server se vuelve no disponible, y luego disponible.

Métricas de disponibilidad

El contador de disponibilidad de SQL Server es la parte del grupo SQL Server metrics.

Alertas

Para asegurar que el monitoreo de la disponibilidad de la instancia SQL Server está yendo bien, que se logre el mínimo tiempo con el servicio abajo, y para automatizar el proceso de monitoreo, establezca la alerta de correo electrónico (para la notificación de correo electrónico en alertas lanzadas relacionadas al contador de disponibilidad del Servidor), y/o las acciones de alertas de comandos personalizados en ApexSQL Monitor para reiniciar o cambiar la configuración del servicio SQL Server monitoreado.

Alertas accionables

Incluya este comando PowerShell dentro de la acción de alerta de comando personalizado para revisar el estado del servicio y, si no está corriendo, el script lo iniciará:

powershell.exe "if ((Get-Service -name MSSQLSERVER).Status -eq 'Stopped'){Start-Service MSSQLSERVER}

if ((Get-Service -name MSSQLSERVER).Status -eq 'Running'){Restart-Service MSSQLSERVER}

En lugar de MSSQLSERVER, otros nombres de servicio de instancias SQL Server pueden ser incluidos. También, si es necesario, el script puede verificar y/o iniciar la instancia SQL Server remota:

powershell.exe "if ((Get-Service -name MSSQLSERVER -ComputerName <name_of_the_instance>).Status -eq 'Stopped'){Start-Service MSSQLSERVER}

if ((Get-Service -name MSSQLSERVER -ComputerName <name_of_the_instance>).).Status -eq 'Running'){Restart-Service MSSQLSERVER}"

Verificar y cambiar la configuración del servicio particular de SQL Server (Tipo de Inicio de Sesión)

Para asegurarse de que el servicio de SQL Server está corriendo continuamente, use este script dentro de la acción de alerta personalizada para evitar la posibilidad de cambio:

powershell.exe “if ((Get-Service -name MSSQLSERVER).StartupType -eq 'Manual'){Set-Service MSSQLSERVER -StartupType Automatic}

if ((Get-Service -name MSSQLSERVER).StartupType -eq Automatic){break}"

Si el tipo de inicio de sesión del servicio es cualquier otra cosa que “Automatic” (automático), el script cambiará su tipo de inicio de sesión. Si ya está establecido a “Automatic”, el script terminará.

diciembre 15, 2017