sql >> Databáze >  >> RDS >> Sqlserver

Procházení protokolů chyb serveru SQL Server

Úvod

Jednou z klíčových dovedností, které jako správce databáze nebo IT člověk potřebujete, je obecně schopnost velmi pečlivě monitorovat systémy. Nedostatek této klíčové dovednosti může vést k chybné diagnóze při řešení problémů. SQL Server zpřístupňuje řadu nástrojů, které mohou správci databází pomoci při odstraňování problémů, ke kterým dochází ve výrobě. Protokol chyb serveru SQL Server a protokol agenta serveru SQL Server jsou dvě nejdůležitější funkce pro odstraňování problémů se serverem SQL. V tomto článku prozkoumáme způsoby, jak můžeme manipulovat s protokoly serveru a agenta.

Výchozí chování

Ve výchozím nastavení SQL Server uchovává posledních šest protokolů chyb a posledních devět protokolů agenta v instanci. Ve výchozím nastavení se při každém restartování instance agenta vygeneruje nový soubor protokolu. Počet uchovávaných souborů protokolu lze upravit pro protokoly SQL Server pomocí příkazu ekvivalentního GUI níže (obr. 1). Chcete-li otevřít toto grafické uživatelské rozhraní v Průzkumníku objektů, klepněte pravým tlačítkem na Správa , vyberte Protokol chyb serveru SQL a klikněte na Konfigurovat .

Obr 1. Posledních šest protokolů chyb

Každý soubor protokolu je generován po restartu a fyzicky uložen v C: \Program Files\ Microsoft SQL Server\MSSQL14.\MSSQL\Log spolu s trasovacími soubory a soubory výpisu. Protokoly chyb serveru SQL jsou pojmenovány ERRORLOG.x (kde x je číslo), zatímco protokoly SQL Agent jsou pojmenovány SQLAGENT.x.

Během spouštění instance motor zapíše klíčové informace do protokolu chyb, který bude obsahovat:

Podrobnosti o verzi SQL Serveru Výrobce systému

  • ID procesu serveru SQL
  • Číslo portu se používá
  • Režim ověřování
  • Parametry spouštění registru
  • Účet služby
  • Zjištěna velikost CPU a paměti
  • Stav klíčových možností, např. Velké stránky, rozšíření fondu vyrovnávací paměti, OLTP v paměti atd.

Tyto informace mohou být velmi užitečné, když se chcete o některém z nich rychle dozvědět z instance, která je vám představena.

Konfigurace možností protokolu chyb

Jak již bylo zmíněno dříve, určité aspekty protokolu chyb SQL a protokolu agenta jsou konfigurovatelné. V mém prostředí jsme nastavili NumErrorLogs do 30, protože chceme mít posledních třicet dní protokolů uchovaných na denní bázi. Zajistíme, aby každý soubor protokolu obsahoval data dne spuštěním sp_cycle_errorlog (a sp_cycle_agent_errorlog) o půlnoci pomocí úlohy agenta. Výpis 3 zobrazuje podrobnosti o této zakázce. Tyto uložené procedury mohou být také docela užitečné pro explicitní cyklování protokolu chyb, když chcete reprodukovat problém a sledovat jeho vývoj (tj. před eskalací do SQL Profiler nebo 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

Obr 2. Nastavení maximálního počtu souborů protokolu chyb

Protokol chyb agenta SQL lze nakonfigurovat na určitou úroveň podrobností kliknutím pravým tlačítkem myši na SQL Server Agent , a poté Protokoly chyb a vyberte Konfigurovat z nabídky. Výpis 2 a obr. 2 ukazují, jak upravit úroveň protokolování.

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

Obr 3. Nastavení možností protokolu chyb 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

„Nalévání“ prostřednictvím protokolů

Seznámení s chybovým protokolem je užitečné pro identifikaci takových věcí, jako jsou položky uvedené ve druhé části, nebo sledování takových událostí, jako je obnova velké databáze. Ale při hledání konkrétní položky, jako jsou selhání přihlášení nebo podobné chyby skryté v moři protokolů, možná budete chtít použít filtr nebo hledejte schopnosti.

Obr 4. Filtr a hledání

vyhledávání by bylo užitečné při hledání konkrétního čísla chyby nebo textu. Hledání vrací výskyty položky požadované po řádcích. Pokud potřebujete zúžit protokol chyb pomocí konkrétních kritérií, použijte filtr. Můžete filtrovat podle připojení , datum nebo obecné podrobnosti.

Obr 5. Kritérium vyhledávání

Obr 6. Kritérium filtru

Když instance selže

Jedna dobrá otázka, kterou by si vášnivý čtenář položil, je, co se stane, když se SQL Server nespustí? Jak prozkoumáme protokoly? Stává se, že kromě toho, že se chybové protokoly zapisují do plochých souborů, jejichž cesta byla zadána dříve, můžete také zobrazit protokoly serveru a agenta v prohlížeči událostí Windows. Vše, co musíte udělat, je filtrovat protokoly aplikací Prohlížeče událostí na události se zdrojem MSSQLSERVER. V pokročilejších prostředích mohou být protokoly SQL Server, stejně jako jakékoli jiné protokoly Windows, uloženy v nástroji třetí strany, jako je SEIM nebo Splunk. Díky tomu jsou věci mnohem jednodušší. Počínaje SQL Serverem 2012 je také možné zobrazit offline protokoly chyb zcela z jiné instance pomocí registrovaných serverů a také pomocí WMI a WQL.

Obr 7. Zobrazení protokolů SQL Server v prohlížeči událostí

Závěr

Protokol chyb serveru SQL lze považovat za výchozí bod pro řešení běžných chyb. Jiné protokoly, jako jsou trasovací soubory generované SQL Trace nebo zachycené SQL Profilerem nebo Extended Events Session, poskytují mnohem více podrobností o tom, co se děje uvnitř enginu. Existují také specifické protokoly, jako jsou protokoly týkající se Database Mail nebo Replication. I když jsou všechny velmi užitečné pro řešení problémů na serveru SQL Server, jako skvělý výchozí bod bych doporučil protokoly chyb SQL Server.

Odkazy

Zobrazení protokolu chyb serveru SQL Server

Prohlížení souborů protokolu offline

Protokol chyb cyklu Sp

Protokol chyb agenta cyklu Sp

Výchozí instalační cesta serveru SQL Server


  1. Operátor SQL se nerovná () pro začátečníky

  2. Jak seřadit řádky podle součtu skupiny v SQL

  3. Android – kurzor na MapReady (značky)

  4. Migrace databáze Access na SQL Server