sql >> Base de Datos >  >> RDS >> Sqlserver

Navegación por los registros de errores de SQL Server

Introducción

Una de las habilidades clave que necesita como administrador de base de datos o persona de TI es generalmente la capacidad de monitorear sistemas con mucho cuidado. La falta de esta habilidad clave puede conducir a un diagnóstico erróneo al solucionar problemas. SQL Server expone una serie de herramientas que pueden ayudar al DBA a solucionar problemas que ocurren en producción. El registro de errores de SQL Server y el registro del agente de SQL Server son dos de las funciones más importantes para solucionar problemas de SQL Server. En este artículo, exploraremos las formas en que podemos manipular los registros del servidor y del agente.

Comportamiento predeterminado

De manera predeterminada, SQL Server conserva los últimos seis registros de errores y los últimos nueve registros de agentes en la instancia. De forma predeterminada, se genera un nuevo archivo de registro cada vez que se reinicia la instancia del agente. La cantidad de archivos de registro guardados se puede modificar para los registros de SQL Server utilizando la declaración de la GUI equivalente a continuación (Fig. 1). Para abrir esta GUI en el Explorador de objetos, haga clic con el botón derecho en Administración , seleccione Registro de errores del servidor SQL y haz clic en Configurar .

Fig. 1. Registros de los últimos seis errores

Cada archivo de registro se genera al reiniciar y se almacena físicamente en C: \Archivos de programa\ Microsoft SQL Server\MSSQL14.\MSSQL\Log junto con archivos de rastreo y archivos de volcado. Los registros de errores de SQL Server se denominan ERRORLOG.x (donde x es un número), mientras que los registros del agente SQL se denominan SQLAGENT.x.

Durante el inicio de la instancia, el motor escribe información clave en el registro de errores, que incluirá:

Detalles de la versión de SQL Server Fabricante del sistema

  • ID de proceso del servidor SQL
  • Número de puerto en uso
  • Modo de autenticación
  • Parámetros de inicio del registro
  • Cuenta de servicio
  • Tamaño de CPU y memoria detectados
  • Estado de las opciones clave, p. Páginas grandes, extensión de grupo de búfer, OLTP en memoria, etc.

Esta información puede ser muy útil cuando solo desea conocer rápidamente cualquiera de ellos desde la instancia que se le presenta.

Configuración de opciones de registro de errores

Como se mencionó anteriormente, ciertos aspectos del registro de errores de SQL y el registro del agente son configurables. En mi entorno, configuramos NumErrorLogs a 30 porque queremos tener los últimos treinta días de registros preservados diariamente. Nos aseguramos de que cada archivo de registro contenga los datos de un día ejecutando sp_cycle_errorlog (y sp_cycle_agent_errorlog) a la medianoche mediante un trabajo de agente. El Listado 3 muestra los detalles de este trabajo. Estos procedimientos almacenados también pueden ser bastante útiles para realizar un ciclo explícito del registro de errores cuando desea reproducir un problema y ver cómo se desarrolla (es decir, antes de escalar a SQL Profiler o Extended Events).

-- Listing 1: Configure NumErrorLogs
USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 30 GO

Fig. 2. Configuración del número máximo de archivos de registro de errores

El Registro de errores del Agente SQL se puede configurar con cierto nivel de detalle haciendo clic con el botón secundario en Agente SQL Server. , y luego Registros de errores y seleccione Configurar del menú. El Listado 2 y la Fig. 2 muestran cómo modificar el nivel de registro.

-- Listing 2: Setting Error Logging Level
USE [msdb]
GO
EXEC msdb dbo.sp_set_sqlagent_properties @errorlogging_level 7 GO

Fig. 3. Configuración de las opciones de registro de errores del Agente SQL

-- Listing 3
/* Create Job to Cycle Server and Agent Error Logs */
USE [msdb]
GO
/****** Object: Job [Cycle Error Logs] Script Date: 01/25/2015 15:40:34 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 01/25/2015 15:40:34 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND
category_class 1
BEGIN
EXEC @ReturnCode = msdb dbo sp_add_category @class N'JOB', @type=N'LOCAL',
@name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16
EXEC @ReturnCode = msdb dbo sp_add_job @job_name=N'Custom_Cycle_Error_Logs',
@enabled 1
@notify_level_eventlog 0,
@notify_level_email 0,
@notify_level_netsend 0
@notify_level_page 0
@delete_level 0,
@description=N'No description available.',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name N'COMPANYDOMAIN\kigiri', @job_id = @jobId OUTPUT IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback /****** Object: Step [Step 1] Script Date: 01/25/2015 15:40:35 ******/
EXEC @ReturnCode = msdb dbo sp_add_jobstep @job_id @jobId, @step_name N'Step 1',
@step_id 1
@cmdexec_success_code 0
@on_success_action 1
@on_success_step_id 0,
@on_fail_action 2
@on_fail_step_id 0,
@retry_attempts 0
@retry_interval 0
@os_run_priority 0, @subsystem=N'TSQL',
@command=N'EXEC master.sys.sp_cycle_errorlog GO
EXEC msdb.dbo.sp_cycle_agent_errorlog
GO',
@database_name=N'master',
@flags 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb dbo sp_update_job @job_id = @jobId @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb dbo sp_add_jobschedule @job_id @jobId @name N'Daily Schedule', @enabled 1 @freq_type 4,
@freq_interval 1 @freq_subday_type 1 @freq_subday_interval 0 @freq_relative_interval 0 @freq_recurrence_factor 0 @active_start_date 20121208,
@active_end_date 99991231 @active_start_time 0 @active_end_time 235959
[email protected]_uid=N'f3eb3e85-9875-4cf5-a789-8c558b772d27'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb dbo sp_add_jobserver @job_id = @jobId @server_name = N'(local)' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
/* Change Maximum Number of Error Log Files to 30 */
USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 30 GO
/* Set jo history length and agent properties */
EXEC msdb dbo.sp_purge_jobhistory @oldest_date '2015-11-28T19:29:00'
GO
USE [msdb]
GO
EXEC msdb dbo.sp_set_sqlagent_properties @jobhistory_max_rows 10000, @jobhistory_max_rows_per_job 1000
GO

“Verter” a través de troncos

Familiarizarse con el registro de errores es útil para identificar cosas como los elementos enumerados en la segunda sección o monitorear eventos como la recuperación de una base de datos grande. Pero al buscar un elemento específico, como fallas de inicio de sesión o errores similares ocultos en el mar de registros, es posible que desee utilizar el filtro o buscar capacidad.

Fig 4. Filtrar y buscar

La búsqueda sería útil al buscar un número o texto de error específico. La búsqueda devuelve las ocurrencias del elemento requerido por línea a la vez. Cuando necesite restringir el registro de errores usando criterios específicos, use el filtro. Puede filtrar por conexión , fecha o generales detalles.

Fig 5. Criterio de búsqueda

Fig. 6. Criterio de filtrado

Cuando falla la instancia

Una buena pregunta que haría un lector entusiasta es ¿qué sucede cuando SQL Server no se inicia? ¿Cómo examinamos los registros? Bueno, sucede que además del hecho de que los registros de errores se escriben en archivos planos cuya ruta se especificó anteriormente, también puede ver los registros del servidor y del agente en el Visor de eventos de Windows. Todo lo que necesita hacer es filtrar los registros de la aplicación del visor de eventos para eventos con una fuente MSSQLSERVER. En entornos más avanzados, los registros de SQL Server, como cualquier otro registro de Windows, se pueden almacenar en una herramienta de terceros como SEIM o Splunk. Esto hace las cosas mucho más fáciles. A partir de SQL Server 2012, también es posible ver los registros de errores sin conexión desde otra instancia por completo, utilizando servidores registrados, así como WMI y WQL.

Fig. 7. Visualización de registros de SQL Server en el Visor de eventos

Conclusión

El registro de errores de SQL Server puede considerarse el punto de partida para solucionar errores comunes. Otros registros, como los archivos de rastreo generados por SQL Trace o capturados por SQL Profiler o Extended Events Session, brindan muchos más detalles sobre lo que sucede dentro del motor. También hay registros específicos como los relacionados con el correo electrónico de la base de datos o la replicación. Si bien todos estos son muy útiles para solucionar problemas en SQL Server, recomendaría los registros de errores de SQL Server como un excelente punto de partida.

Referencias

Visualización del registro de errores de SQL Server

Visualización de archivos de registro sin conexión

Registro de errores del ciclo Sp

Registro de errores del agente de ciclo Sp

Ruta de instalación predeterminada de SQL Server