Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Navegando nos logs de erro do SQL Server

Introdução


Uma das principais habilidades de que você precisa como administrador de banco de dados ou profissional de TI geralmente é a capacidade de monitorar os sistemas com muito cuidado. A falta dessa habilidade chave pode levar a erros de diagnóstico ao solucionar problemas. O SQL Server expõe várias ferramentas que podem ajudar o DBA na solução de problemas que ocorrem na produção. O log de erros do SQL Server e o log do SQL Server Agent são dois dos recursos mais importantes para solucionar problemas do SQL Server. Neste artigo, exploraremos as maneiras pelas quais podemos manipular os logs do Servidor e do Agente.


Comportamento padrão


Por padrão, o SQL Server mantém os últimos seis logs de erro e os últimos nove logs do agente na instância. Por padrão, um novo arquivo de log é gerado toda vez que a instância do agente é reiniciada. O número de arquivos de log mantidos pode ser modificado para os logs do SQL Server usando a instrução da GUI equivalente abaixo (Fig. 1). Para abrir esta GUI no Pesquisador de Objetos, clique com o botão direito do mouse em Gerenciamento , selecione Log de erros do SQL Server e clique em Configurar .



Fig 1. Últimos Seis Registros de Erros

Cada arquivo de log é gerado na reinicialização e armazenado fisicamente em C: \Arquivos de Programas\ Microsoft SQL Server\MSSQL14.\MSSQL\Log juntamente com arquivos de rastreamento e arquivos de despejo. Os logs de erro do SQL Server são denominados ERRORLOG.x (onde x é um número), enquanto os logs do SQL Agent são denominados SQLAGENT.x.

Durante a inicialização da instância, o mecanismo grava informações importantes no log de erros, que incluirá:

Detalhes da versão do SQL Server Fabricante do sistema
  • ID do processo do SQL Server
  • Número da porta em uso
  • Modo de autenticação
  • Parâmetros de inicialização do registro
  • Conta de serviço
  • Tamanho da CPU e memória detectados
  • Status das opções de chave, por exemplo Páginas grandes, extensão do pool de buffers, OLTP na memória etc.

Essas informações podem ser muito úteis quando você deseja apenas descobrir rapidamente sobre qualquer um deles a partir da instância que é apresentada a você.

Configurando opções de registro de erros


Conforme mencionado anteriormente, certos aspectos do log de erros do SQL e do log do agente são configuráveis. No meu ambiente, definimos NumErrorLogs para 30 porque queremos ter os últimos trinta dias de logs preservados diariamente. Garantimos que cada arquivo de log contenha os dados de um dia executando sp_cycle_errorlog (e sp_cycle_agent_errorlog) à meia-noite usando um trabalho de agente. A Listagem 3 mostra os detalhes deste trabalho. Esses procedimentos armazenados também podem ser bastante úteis para ciclos explícitos do log de erros quando você deseja reproduzir um problema e vê-lo se desenrolar (ou seja, antes de escalar para SQL Profiler ou 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. Configurando o Número Máximo de Arquivos de Log de Erros

O log de erros do SQL Agent pode ser configurado com algum nível de detalhe clicando com o botão direito do mouse em SQL Server Agent , e, em seguida, Registros de erros e selecione Configurar do cardápio. A Listagem 2 e a Fig. 2 mostram como modificar o nível de registro.
-- Listing 2: Setting Error Logging Level
USE [msdb]
GO
EXEC msdb dbo.sp_set_sqlagent_properties @errorlogging_level 7 GO



Fig 3. Configurando as opções de log de erros do SQL Agent
-- 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

"Despejando" através de logs


Familiarizar-se com o log de erros é útil para identificar itens como os itens listados na segunda seção ou monitorar eventos como a recuperação de um grande banco de dados. Mas ao pesquisar um item específico, como falhas de login ou erros semelhantes ocultos no mar de logs, você pode usar o filtro ou pesquisar capacidade.



Fig 4. Filtro e Pesquisa

A pesquisa seria útil ao procurar um número ou texto de erro específico. A pesquisa retorna as ocorrências do item solicitadas por linha de cada vez. Quando você precisar restringir o log de erros usando critérios específicos, use o filtro. Você pode filtrar por conexão , data ou geral detalhes.



Fig 5. Critério de Pesquisa



Fig 6. Critério de Filtro

Quando a instância falha


Uma boa pergunta que um leitor atento faria é o que acontece quando o SQL Server falha ao iniciar? Como examinamos os logs? Bem, acontece que além do fato de que os logs de erro são gravados em arquivos simples cujo caminho foi especificado anteriormente, você também pode visualizar os logs do Servidor e do Agente no Visualizador de Eventos do Windows. Tudo o que você precisa fazer é filtrar os logs do aplicativo Event Viewer para eventos com uma origem MSSQLSERVER. Em ambientes mais avançados, os logs do SQL Server, como qualquer outro log do Windows, podem ser armazenados em uma ferramenta de terceiros como SEIM ou Splunk. Isso torna as coisas muito mais fáceis. A partir do SQL Server 2012, também é possível visualizar logs de erros offline de outra instância inteiramente, usando servidores registrados, bem como WMI e WQL.



Fig 7. Visualizando Logs do SQL Server no Visualizador de Eventos

Conclusão


O log de erros do SQL Server pode ser considerado o ponto de partida para solucionar erros comuns. Outros logs, como arquivos de rastreamento gerados pelo SQL Trace ou capturados pelo SQL Profiler ou Extended Events Session, fornecem muito mais detalhes sobre o que está acontecendo dentro do mecanismo. Há também logs específicos, como os relacionados ao Database Mail ou Replication. Embora todos sejam muito úteis para solucionar problemas no SQL Server, eu recomendaria os logs de erro do SQL Server como um ótimo ponto de partida.

Referências


Exibindo o log de erros do SQL Server

Visualizando Arquivos de Log Offline

Registro de erros do ciclo Sp

Registro de erros do agente do ciclo Sp

Caminho de instalação padrão do SQL Server