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