Introduktion
En af de nøglefærdigheder, du har brug for som databaseadministrator eller it-person, er generelt evnen til at overvåge systemer meget omhyggeligt. Mangel på denne nøglefærdighed kan føre til fejldiagnosticering ved fejlfinding af problemer. SQL Server afslører en række værktøjer, der kan hjælpe DBA med fejlfinding af problemer, der opstår i produktionen. SQL Server Error Log og SQL Server Agent Log er to af de vigtigste faciliteter til fejlfinding af SQL Server. I denne artikel skal vi undersøge, hvordan vi kan manipulere server- og agentlogfilerne.
Standardadfærd
Som standard beholder SQL Server de sidste seks fejllogfiler og de sidste ni agentlogfiler i forekomsten. Som standard genereres en ny logfil, hver gang instansen af agenten genstartes. Antallet af logfiler, der opbevares, kan ændres for SQL Server-logfilerne ved at bruge sætningen for den tilsvarende GUI nedenfor (fig. 1). For at åbne denne GUI i Object Explorer skal du højreklikke på Management , vælg SQL Server Error Log og klik på Konfigurer .
Fig 1. Sidste seks fejllogfiler
Hver logfil genereres ved genstart og gemmes fysisk i C: \Program Files\ Microsoft SQL Server\MSSQL14.
Under opstarten af instansen skriver motoren nøgleoplysninger til fejlloggen, som vil omfatte:
SQL Server Version detaljer System Manufacturer
- SQL-serverproces-id
- Portnummer i brug
- Godkendelsestilstand
- Opstartsparametre for registreringsdatabasen
- Servicekonto
- Størrelse på CPU og hukommelse fundet
- Status for nøgleindstillinger, f.eks. Store sider, Buffer Pool Extension, In-Memory OLTP osv.
Disse oplysninger kan være meget nyttige, når du bare hurtigt vil finde ud af om nogen af dem fra den instans, der er introduceret til dig.
Konfiguration af fejllogindstillinger
Som tidligere nævnt kan visse aspekter af SQL-fejlloggen og agentloggen konfigureres. I mit miljø indstiller vi NumErrorLogs til 30, fordi vi ønsker at have de sidste tredive dages logs bevaret på daglig basis. Vi sikrer, at hver logfil indeholder data for en dag ved at køre sp_cycle_errorlog (og sp_cycle_agent_errorlog) ved midnat ved hjælp af et agentjob. Liste 3 viser detaljerne for dette job. Disse lagrede procedurer kan også være ret nyttige til eksplicit at cykle fejlloggen, når du vil reproducere et problem og se det udfolde sig (dvs. før det eskalerer til SQL Profiler eller Extended Events).
-- Liste 1:Konfigurer NumErrorLogsUSE [master]GOEXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 30 .
Fig 2. Indstilling af det maksimale antal fejllogfiler
SQL Agent-fejlloggen kan konfigureres til en vis detaljeringsgrad ved at højreklikke på SQL Server Agent , og derefter Fejllogs og vælg Konfigurer fra menuen. Liste 2 og Fig. 2 viser, hvordan man ændrer logningsniveauet.
-- Liste 2:Indstilling af fejllogningsniveauUSE [msdb]GOEXEC msdb dbo.sp_set_sqlagent_properties @errorlogging_level 7 GO
Fig 3. Indstilling af SQL Agent-fejllogindstillinger
-- Liste 3/* Opret job for at cykle server- og agentfejllogs */USE [msdb]GO/****** Objekt:Job [Cyklusfejllogs] Scriptdato:25/01/2015 15:40:34 ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/****** Objekt:JobCategory [[Ukategoriseret (Lokal)]]] Scriptdato:25/01/2015 15:40:34 ******/HVIS IKKE FINDER (VÆLG navn FRA msdb.dbo.syscategories WHERE name=N'[Ukategoriseret (Lokal)]' ANDcategory_class 1BEGINEXEC @ReturnCode =msdb dbo sp_add_category @class N'JOB', @type=N'LOCAL',@name=N'[Ukategoriseret (Lokal)]'IF (@@FEJL <> 0 ELLER @ReturnCode <> 0) GOTO QuitWithRollbackENDDECLARE @jobId BINARY(16EXEC @ReturnCode =msdb dbo sp_jobd_name=@' 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'Ingen beskrivelse tilgængelig.',@category_cat)_n'logized,@category_cat]_n' N'COMPANYDOMAIN\kigiri', @job_id =@jobId OUTPUT IF (@@ERROR <> 0 ELLER @ReturnCod e <> 0) GÅ TIL QuitWithRollback /****** Objekt:Trin [Trin 1] Scriptdato:01/25/2015 15:40:35 ******/EXEC @ReturnCode =msdb dbo sp_add_jobstep @job_id @jobId, @trin_navn N'Step 1',@trin_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_ command=N'EXEC master.sys.sp_cycle_errorlog GOEXEC msdb.dbo.sp_cycle_agent_errorlogGO',@database_name=N'master',@flags 0IF (@@ERROR <> 0 ELLER @ReturnCode <> 0) GOTO QuitWithRollback dEXEC @ReturdbCodebo =ReturdbCodebo sp_update_job @job_id =@jobId @start_step_id =1IF (@@ERROR <> 0 ELLER @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb dbo sp_add_jobschedule @job_id @job_id Nule'Id,en type @job_id Nule'Id,en ,@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_end_time 023_5 [email protected]_uid=N'f3eb3e85-9875-4cf5-a789-8c558b772d27'IF (@@ERROR <> 0 ELLER @ReturnCode <> 0) GOTO QuitWithRollbackEXEDBOC @Return_I '(local)' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback COMMIT TRANSACTIONGOTO EndSaveQuitWithRollback:IF (@@TRANCOUNT> 0) ROLLBACK TRANSACTIONEndSave:GO/* Skift * Maksimalt antal fejl i logfiler til 30 /USE [master]GOEXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 30 GO/* Indstil jobhistoriklængde og agentegenskaber */EXESTjoC msp_purgeold_datebhistory '2015-11-28T19:29:00'GOUSE [msdb]GOEXEC msdb dbo.sp_set_sqlagent_properties @jobhistory_max_rows 10000, @jobhistory_max_rows_per_job 1000GO“Hælde” gennem logfiler
At gøre sig bekendt med fejlloggen er nyttig til at identificere ting som de elementer, der er angivet i det andet afsnit, eller overvåge sådanne hændelser som gendannelse af en stor database. Men når du søger efter et bestemt element, såsom login-fejl eller lignende fejl gemt i havet af logfiler, kan du bruge filteret eller søg kapacitet.
Fig. 4. Filtrer og søg
søgningen ville være nyttig, når du leder efter et specifikt fejlnummer eller tekst. Søgningen returnerer forekomsterne af den vare, der kræves af linje ad gangen. Når du har brug for at indsnævre fejlloggen ved hjælp af specifikke kriterier, skal du bruge filteret. Du kan filtrere efter forbindelse , dato eller generelt detaljer.
Fig 5. Søgekriterium
Fig. 6. Filterkriterium
Når forekomsten mislykkes
Et godt spørgsmål, som en ivrig læser ville stille, er, hvad der sker, når SQL Server ikke starter? Hvordan undersøger vi logfilerne? Nå, det sker sådan, at udover det faktum, at fejllogfilerne er skrevet til flade filer, hvis sti tidligere blev angivet, kan du også se server- og agentlogfilerne i Windows Event Viewer. Alt du skal gøre er at filtrere Event Viewer-applikationsloggene for hændelser med en kilde MSSQLSERVER. I mere avancerede miljøer kan SQL Server-logfiler, ligesom alle andre Windows-logfiler, gemmes i et tredjepartsværktøj som SEIM eller Splunk. Dette gør tingene så meget nemmere. Fra og med SQL Server 2012 er det også muligt at se offline fejllogfiler fra en anden instans helt, ved at bruge registrerede servere samt ved at bruge WMI og WQL.
Fig. 7. Visning af SQL Server-logfiler i Event Viewer
Konklusion
SQL Server Error Log kan betragtes som udgangspunktet for fejlfinding af almindelige fejl. Andre logfiler, såsom sporingsfiler genereret af SQL Trace eller fanget af SQL Profiler eller Extended Events Session, giver langt flere detaljer om, hvad der sker inde i motoren. Der er også specifikke logfiler som dem, der er relateret til databasemail eller replikering. Selvom disse alle er meget nyttige til fejlfinding af problemer i SQL Server, vil jeg anbefale SQL Server Error Logs som et godt udgangspunkt.
Referencer
Visning af SQL Server-fejlloggen
Visning af offline logfiler
Sp cyklus fejllog
Sp cyklus agent fejllog
SQL Server Standard installationssti