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