Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Nawigacja w dziennikach błędów serwera SQL

Wprowadzenie

Jedną z kluczowych umiejętności, których potrzebujesz jako administrator baz danych lub informatyk, jest generalnie umiejętność bardzo dokładnego monitorowania systemów. Brak tej kluczowej umiejętności może prowadzić do błędnej diagnozy podczas rozwiązywania problemów. SQL Server udostępnia szereg narzędzi, które mogą pomóc administratorowi DBA w rozwiązywaniu problemów występujących w środowisku produkcyjnym. Dziennik błędów programu SQL Server i dziennik agenta programu SQL Server to dwa najważniejsze narzędzia do rozwiązywania problemów z programem SQL Server. W tym artykule omówimy sposoby manipulowania dziennikami serwera i agenta.

Domyślne zachowanie

Domyślnie SQL Server przechowuje w instancji ostatnie sześć dzienników błędów i dziewięć ostatnich dzienników agenta. Domyślnie nowy plik dziennika jest generowany za każdym razem, gdy instancja agenta jest restartowana. Liczbę przechowywanych plików logów można modyfikować dla logów SQL Server za pomocą poniższego zestawienia równoważnego GUI (rys. 1). Aby otworzyć ten GUI w Eksploratorze obiektów, kliknij prawym przyciskiem myszy Zarządzanie , wybierz Dziennik błędów serwera SQL i kliknij Konfiguruj .

Rys 1. Ostatnie sześć dzienników błędów

Każdy plik dziennika jest generowany po ponownym uruchomieniu i fizycznie przechowywany w C: \Program Files\ Microsoft SQL Server\MSSQL14.\MSSQL\Log wraz z plikami śledzenia i plikami zrzutów. Dzienniki błędów programu SQL Server noszą nazwę ERRORLOG.x (gdzie x jest liczbą), podczas gdy dzienniki agenta SQL noszą nazwę SQLAGENT.x.

Podczas uruchamiania instancji silnik zapisuje kluczowe informacje w dzienniku błędów, które obejmują:

Szczegóły wersji serwera SQL Producent systemu

  • Identyfikator procesu serwera SQL
  • Numer portu w użyciu
  • Tryb uwierzytelniania
  • Parametry uruchamiania rejestru
  • Konto usługi
  • Wykryto rozmiar procesora i pamięci
  • Status kluczowych opcji, np. Duże strony, rozszerzenie puli buforów, OLTP w pamięci itp.

Te informacje mogą być bardzo przydatne, gdy chcesz po prostu szybko dowiedzieć się o którymkolwiek z nich z przedstawionej Ci instancji.

Konfigurowanie opcji dziennika błędów

Jak wspomniano wcześniej, niektóre aspekty dziennika błędów SQL i dziennika agenta można konfigurować. W moim środowisku ustawiamy NumErrorLogs do 30, ponieważ chcemy codziennie zachowywać dzienniki z ostatnich trzydziestu dni. Zapewniamy, że każdy plik dziennika zawiera dane z dnia, uruchamiając sp_cycle_errorlog (i sp_cycle_agent_errorlog) o północy przy użyciu zadania agenta. Listing 3 pokazuje szczegóły tego zadania. Te procedury składowane mogą być również bardzo przydatne do jawnego przełączania dziennika błędów, gdy chcesz odtworzyć problem i obserwować jego rozwój (tj. przed eskalacją do programu SQL Profiler lub zdarzeń rozszerzonych).

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

Rys 2. Ustawianie maksymalnej liczby plików dziennika błędów

Dziennik błędów agenta SQL można skonfigurować na pewnym poziomie szczegółowości, klikając prawym przyciskiem myszy Agent serwera SQL , a następnie Dzienniki błędów i wybierz Konfiguruj z menu. Listing 2 i Rys. 2 pokazują, jak zmodyfikować poziom rejestrowania.

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

Rys 3. Ustawianie opcji dziennika błędów agenta SQL

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

„Przelewanie się” przez dzienniki

Zapoznanie się z dziennikiem błędów jest przydatne do identyfikacji takich rzeczy, jak elementy wymienione w drugiej sekcji lub monitorowania takich zdarzeń, jak odzyskiwanie dużej bazy danych. Ale podczas wyszukiwania konkretnego elementu, takiego jak niepowodzenia logowania lub podobne błędy ukryte w morzu dzienników, możesz użyć filtra lub wyszukaj możliwości.

Rys 4. Filtrowanie i wyszukiwanie

wyszukiwanie przyda się przy szukaniu konkretnego numeru lub tekstu błędu. Wyszukiwanie zwraca na raz wystąpienia elementu wymaganego według wiersza. Kiedy musisz zawęzić dziennik błędów za pomocą określonych kryteriów, użyj filtra. Możesz filtrować według połączenia , data lub ogólne szczegóły.

Rys 5. Kryterium wyszukiwania

Rys 6. Kryterium filtrowania

Gdy instancja ulegnie awarii

Jednym z dobrych pytań, które zadałby wnikliwy czytelnik, jest to, co się dzieje, gdy SQL Server nie uruchamia się? Jak badamy dzienniki? Otóż ​​tak się składa, że ​​oprócz tego, że logi błędów są zapisywane do płaskich plików, których ścieżka została wcześniej określona, ​​można również przeglądać logi serwera i agenta w Podglądzie zdarzeń systemu Windows. Wszystko, co musisz zrobić, to przefiltrować dzienniki aplikacji Podglądu zdarzeń pod kątem zdarzeń ze źródłem MSSQLSERVER. W bardziej zaawansowanych środowiskach dzienniki SQL Server, podobnie jak inne dzienniki systemu Windows, mogą być przechowywane w narzędziu innej firmy, takim jak SEIM lub Splunk. To znacznie ułatwia sprawę. Począwszy od SQL Server 2012, możliwe jest również przeglądanie dzienników błędów offline z całkowicie innej instancji, przy użyciu zarejestrowanych serwerów, a także przy użyciu WMI i WQL.

Rys 7. Przeglądanie logów SQL Server w Podglądzie zdarzeń

Wniosek

Dziennik błędów programu SQL Server można uznać za punkt wyjścia do rozwiązywania typowych błędów. Inne dzienniki, takie jak pliki śledzenia wygenerowane przez narzędzie SQL Trace lub przechwycone przez program SQL Profiler lub sesję rozszerzonych zdarzeń, zawierają znacznie więcej szczegółów na temat tego, co dzieje się w silniku. Istnieją również określone dzienniki, takie jak te związane z pocztą bazy danych lub replikacją. Chociaż są one bardzo przydatne przy rozwiązywaniu problemów w SQL Server, polecam logi błędów SQL Server jako świetny punkt wyjścia.

Referencje

Przeglądanie dziennika błędów serwera SQL

Przeglądanie plików dziennika offline

Dziennik błędów cyklu Sp

Dziennik błędów agenta cyklu Sp

Domyślna ścieżka instalacji serwera SQL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy w Microsoft SQL Server istnieje typ danych logicznych, taki jak w MySQL?

  2. Jak zainstalować SQL Server w systemie Windows

  3. Jak zmienić nazwę bazy danych w SQL Server — samouczek SQL Server / TSQL część 26

  4. Jak włączyć przechwytywanie zmian danych (CDC) w całej tabeli LUB włączyć funkcję CDC w tabeli z listą kolumn w programie SQL Server

  5. Jak uzyskać ostatni dzień zeszłego tygodnia w sql?