Introduktion
En av nyckelfärdigheterna du behöver som databasadministratör eller IT-person är i allmänhet förmågan att övervaka system mycket noggrant. Brist på denna nyckelfärdighet kan leda till feldiagnos vid felsökning av problem. SQL Server exponerar ett antal verktyg som kan hjälpa DBA att felsöka problem som uppstår i produktionen. SQL Server Error Log och SQL Server Agent Log är två av de viktigaste faciliteterna för felsökning av SQL Server. I den här artikeln ska vi utforska hur vi kan manipulera server- och agentloggarna.
Standardbeteende
Som standard behåller SQL Server de sex senaste felloggarna och de sista nio agentloggarna i instansen. Som standard genereras en ny loggfil varje gång instansen av agenten startas om. Antalet loggfiler som lagras kan ändras för SQL Server-loggarna med hjälp av satsen för motsvarande GUI nedan (Fig. 1). För att öppna det här GUI i Object Explorer, högerklicka på Management , välj SQL Server Error Log och klicka på Konfigurera .
Fig 1. Senaste sex felloggarna
Varje loggfil genereras vid omstart och lagras fysiskt i C: \Program Files\ Microsoft SQL Server\MSSQL14.
Under instansstarten skriver motorn nyckelinformation till felloggen som inkluderar:
SQL Server-versionsinformation Systemtillverkare
- SQL Server Process ID
- Portnummer används
- Autentiseringsläge
- Registrets startparametrar
- Tjänstkonto
- Storlek på CPU och minne har upptäckts
- Status för nyckelalternativ, t.ex. Stora sidor, Buffer Pool Extension, In-Memory OLTP etc.
Den här informationen kan vara mycket användbar när du bara snabbt vill ta reda på någon av dem från den instans som presenteras för dig.
Konfigurera alternativ för fellogg
Som nämnts tidigare är vissa aspekter av SQL-felloggen och agentloggen konfigurerbara. I min miljö ställer vi in NumErrorLogs till 30 eftersom vi vill ha de sista trettio dagarna av stockar bevarade dagligen. Vi säkerställer att varje loggfil innehåller data för en dag genom att köra sp_cycle_errorlog (och sp_cycle_agent_errorlog) vid midnatt med hjälp av ett agentjobb. Lista 3 visar detaljerna för det här jobbet. Dessa lagrade procedurer kan också vara ganska användbara för att explicit cykla felloggen när du vill reproducera ett problem och se det utvecklas (dvs innan det eskalerar till SQL Profiler eller Extended Events).
-- Lista 1:Konfigurera NumErrorLogsUSE [master]GOEXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 30 .
Fig 2. Ställa in maximalt antal felloggfiler
SQL Agent Error Log kan konfigureras till en viss detaljnivå genom att högerklicka på SQL Server Agent , och sedan Felloggar och välj Konfigurera från menyn. Lista 2 och Fig. 2 visar hur man ändrar loggningsnivån.
-- Lista 2:Inställning av felloggningsnivåUSE [msdb]GOEXEC msdb dbo.sp_set_sqlagent_properties @errorlogging_level 7 GO
Fig 3. Ställa in alternativ för SQL Agent-fellogg
-- Lista 3/* Skapa jobb för att cykla server- och agentfelloggar */USE [msdb]GO/****** Objekt:Jobb [Cykelfelloggar] Skriptdatum:2015-01-25 15:40:34 ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/***** Objekt:JobCategory [[Okategoriserad (Lokal)]]] Skriptdatum:2015-01-25 15:40:34 ******/OM INTE FINNS (VÄLJ namn FRÅN msdb.dbo.syscategories WHERE name=N'[Okategoriserad (Lokal)]' ANDcategory_class 1BEGINEXEC @ReturnCode =msdb dbo sp_add_category @class N'JOB', @type=N'LOCAL',@name=N'[Okategoriserad (Lokal)]'IF (@@ERROR <> 0 OR @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 beskrivning tillgänglig.',@category_category_name=Logid_n' N'COMPANYDOMAIN\kigiri', @job_id =@jobId OUTPUT IF (@@ERROR <> 0 ELLER @ReturnCod e <> 0) GÅ TILL QuitWithRollback /****** Objekt:Steg [Steg 1] Skriptdatum:2015-01-25 15:40:35 ******/EXEC @ReturnCode =msdb dbo sp_add_jobstep @job_id @jobId, @step_name N'Steg 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_tempts@retryos_0,0 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 msdbCodebo =ReturnCodebo sp_update_job @job_id =@jobId @start_step_id =1IF (@@ERROR <> 0 ELLER @ReturnCode <> 0) GÅ TILL QuitWithRollbackEXEC @ReturnCode =msdb dbo sp_add_jobschedule @job_id Nule'Daid @fre_id Nule'Daid, en Schedule @job_id Nule'Daid, 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 02_5 [email protected]_uid=N'f3eb3e85-9875-4cf5-a789-8c558b772d27'IF (@@ERROR <> 0 ELLER @ReturnCode <> 0) GÅ TILL AvslutaWithRollbackEXEC =@msdjobjoserver @sdjobjobserver @msdbjobserver @sdjobjobserver @sdjob '(local)' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback COMMIT TRANSACTIONGOTO EndSaveQuitWithRollback:IF (@@TRANCOUNT> 0) ROLLBACK TRANSACTIONEndSave:GO/* Ändra maximalt antal fel till 30 loggfiler /USE [master]GOEXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 30 GO/* Ställ in jobbhistorikens längd och agentegenskaper */EXESTjoC msp_purgeold_datebhistosdb d '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äller” genom loggar
Att bekanta sig med felloggen är användbart för att identifiera sådana saker som objekten som listas i det andra avsnittet eller övervaka sådana händelser som återställning av en stor databas. Men när du söker efter ett specifikt objekt, till exempel inloggningsfel eller liknande fel dolda i havet av loggar, kanske du vill använda filtret eller sök förmåga.
Fig 4. Filtrera och sök
sökningen skulle vara användbart när du letar efter ett specifikt felnummer eller text. Sökningen returnerar förekomsterna av artikeln som krävs av rad åt gången. När du behöver begränsa felloggen med specifika kriterier, använd filtret. Du kan filtrera efter anslutning , datum eller allmänt detaljer.
Fig 5. Sökkriterium
Fig 6. Filterkriterium
När instansen misslyckas
En bra fråga som en angelägen läsare skulle ställa är vad som händer när SQL Server inte startar? Hur granskar vi loggarna? Tja, det råkar vara så att förutom det faktum att felloggarna skrivs till platta filer vars sökväg tidigare angavs, kan du också se server- och agentloggarna i Windows Event Viewer. Allt du behöver göra är att filtrera Event Viewer-applikationsloggarna för händelser med en käll MSSQLSERVER. I mer avancerade miljöer kan SQL Server-loggar, precis som alla andra Windows-loggar, lagras i ett tredjepartsverktyg som SEIM eller Splunk. Detta gör saker så mycket enklare. Från och med SQL Server 2012 är det också möjligt att se offlinefelloggar från en annan instans helt och hållet, genom att använda registrerade servrar samt använda WMI och WQL.
Fig 7. Visa SQL Server-loggar i Event Viewer
Slutsats
SQL Server Error Log kan betraktas som utgångspunkten för felsökning av vanliga fel. Andra loggar, som spårningsfiler som genereras av SQL Trace eller fångas av SQL Profiler eller Extended Event Session, ger mycket mer information om vad som händer inuti motorn. Det finns också specifika loggar som de som är relaterade till Databas Mail eller Replikering. Även om dessa alla är mycket användbara för att felsöka problem i SQL Server, skulle jag rekommendera SQL Server Error Logs som en bra utgångspunkt.
Referenser
Visa SQL Server-felloggen
Visa offlineloggfiler
Sp cycle fellogg
Sp cycle agent fellogg
SQL Server Standardinstallationsväg