sql >> Database >  >> RDS >> Sqlserver

Navigeren door SQL Server-foutlogboeken

Inleiding

Een van de belangrijkste vaardigheden die u als databasebeheerder of IT-persoon nodig hebt, is over het algemeen het vermogen om systemen zeer zorgvuldig te bewaken. Het ontbreken van deze belangrijke vaardigheid kan leiden tot een verkeerde diagnose bij het oplossen van problemen. SQL Server onthult een aantal hulpprogramma's die de DBA kunnen helpen bij het oplossen van problemen die zich in de productie voordoen. Het SQL Server-foutlogboek en het SQL Server-agentlogboek zijn twee van de belangrijkste voorzieningen voor het oplossen van problemen met SQL Server. In dit artikel zullen we onderzoeken hoe we de server- en agentlogboeken kunnen manipuleren.

Standaardgedrag

Standaard bewaart SQL Server de laatste zes foutlogboeken en de laatste negen agentlogboeken in het exemplaar. Elke keer dat de instantie van de agent opnieuw wordt gestart, wordt standaard een nieuw logbestand gegenereerd. Het aantal bijgehouden logbestanden kan worden gewijzigd voor de SQL Server-logboeken met behulp van de verklaring van de equivalente GUI hieronder (Fig. 1). Om deze GUI in Object Explorer te openen, klikt u met de rechtermuisknop op Beheer , selecteer SQL Server Error Log en klik op Configureren .

Fig 1. Laatste zes foutenlogboeken

Elk logbestand wordt gegenereerd bij het opnieuw opstarten en fysiek opgeslagen in C: \Program Files\ Microsoft SQL Server\MSSQL14.\MSSQL\Log samen met trace-bestanden en dump-bestanden. SQL Server-foutlogboeken heten ERRORLOG.x (waarbij x een getal is), terwijl SQL Agent-logboeken SQLAGENT.x heten.

Tijdens het opstarten van de instantie schrijft de engine belangrijke informatie naar het foutenlogboek, waaronder:

Details SQL Server-versie Systeemfabrikant

  • SQL Server-proces-ID
  • Poortnummer in gebruik
  • Verificatiemodus
  • Opstartparameters register
  • Serviceaccount
  • Grootte van CPU en geheugen gedetecteerd
  • Status van toetsopties, bijv. Grote pagina's, bufferpooluitbreiding, in-memory OLTP enz.

Deze informatie kan erg handig zijn als u snel iets wilt weten over een van hen uit de instantie die aan u is voorgesteld.

Opties voor foutlogboek configureren

Zoals eerder vermeld, zijn bepaalde aspecten van het SQL-foutlogboek en het agentlogboek configureerbaar. In mijn omgeving hebben we NumErrorLogs . ingesteld tot 30 omdat we de logboeken van de laatste dertig dagen dagelijks willen bewaren. We zorgen ervoor dat elk logbestand de gegevens van een dag bevat door sp_cycle_errorlog (en sp_cycle_agent_errorlog) om middernacht uit te voeren met behulp van een Agent Job. Listing 3 toont de details van deze job. Deze opgeslagen procedures kunnen ook heel handig zijn om expliciet door het foutenlogboek te bladeren wanneer u een probleem wilt reproduceren en wilt zien hoe het zich ontvouwt (d.w.z. voordat u escaleert naar SQL Profiler of 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. Maximaal aantal foutenlogbestanden instellen

Het foutenlogboek van SQL Agent kan tot op een bepaald detailniveau worden geconfigureerd door met de rechtermuisknop te klikken op SQL Server Agent , en dan Foutlogboeken en selecteer Configureren uit de menukaart. Lijst 2 en Fig. 2 laten zien hoe u het logniveau kunt wijzigen.

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

Fig 3. Opties voor SQL Agent-foutlogboek instellen

-- 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

“Gieten” door logboeken

Het is handig om vertrouwd te raken met het foutenlogboek om zaken te identificeren zoals de items die in de tweede sectie worden vermeld of om gebeurtenissen zoals het herstel van een grote database te controleren. Maar wanneer u zoekt naar een specifiek item, zoals inlogfouten of soortgelijke fouten die verborgen zijn in de zee van logs, wilt u misschien het filter gebruiken of zoek vermogen.

Fig 4. Filter en zoek

De zoekopdracht zou handig zijn bij het zoeken naar een specifiek foutnummer of tekst. De zoekopdracht retourneert de exemplaren van het vereiste item per regel per keer. Gebruik het filter wanneer u het foutenlogboek moet verfijnen met specifieke criteria. U kunt filteren op verbinding , datum of algemeen details.

Fig 5. Zoekcriterium

Fig 6. Filtercriterium

Als de instantie mislukt

Een goede vraag die een enthousiaste lezer zou stellen, is wat er gebeurt als SQL Server niet opstart? Hoe onderzoeken we de logboeken? Welnu, het gebeurt zo dat naast het feit dat de foutenlogboeken worden geschreven naar platte bestanden waarvan het pad eerder is opgegeven, u ook de server- en agentlogboeken kunt bekijken in Windows Event Viewer. Het enige dat u hoeft te doen, is de Event Viewer-toepassingslogboeken filteren op gebeurtenissen met een bron MSSQLSERVER. In meer geavanceerde omgevingen kunnen SQL Server-logboeken, net als alle andere Windows-logboeken, worden opgeslagen in een hulpprogramma van derden, zoals SEIM of Splunk. Dit maakt de zaken zoveel gemakkelijker. Vanaf SQL Server 2012 is het ook mogelijk om offline foutlogboeken van een andere instantie volledig te bekijken, zowel met geregistreerde servers als met WMI en WQL.

Fig 7. SQL Server-logboeken bekijken in Event Viewer

Conclusie

Het foutenlogboek van SQL Server kan worden beschouwd als het startpunt voor het oplossen van veelvoorkomende fouten. Andere logbestanden, zoals traceerbestanden die zijn gegenereerd door SQL Trace of vastgelegd door SQL Profiler of Extended Events Session, geven veel meer details over wat er in de engine gebeurt. Er zijn ook specifieke logboeken zoals die met betrekking tot Database Mail of Replicatie. Hoewel deze allemaal erg handig zijn voor het oplossen van problemen in SQL Server, zou ik SQL Server Error Logs aanraden als een goed startpunt.

Referenties

Het foutenlogboek van SQL Server bekijken

Offline logbestanden bekijken

Sp-cyclusfoutlogboek

Foutenlogboek Sp cycle-agent

Standaard installatiepad voor SQL Server


  1. MySQL zoeken en tekst in een veld vervangen

  2. Snellere innovatie leveren aan de gemeenschap van MariaDB

  3. Hoe in te voegen in een array in PostgreSQL

  4. Base 36 naar Base 10 conversie met alleen SQL