Въведение
Едно от ключовите умения, от които се нуждаете като администратор на база данни или ИТ човек, обикновено е способността да наблюдавате системите много внимателно. Липсата на това ключово умение може да доведе до погрешна диагноза при отстраняване на проблеми. SQL Server разкрива редица инструменти, които могат да помогнат на DBA при отстраняване на проблеми, които възникват в производството. Регистърът на грешките на SQL Server и регистърът на агента на SQL Server са две от най-важните средства за отстраняване на неизправности на SQL Server. В тази статия ще разгледаме начините, по които можем да манипулираме регистрационните файлове на сървъра и агента.
Поведение по подразбиране
По подразбиране SQL Server съхранява последните шест регистрационни файлове за грешки и последните девет регистрационни файлове на агента в екземпляра. По подразбиране всеки път, когато екземплярът на агента се рестартира, се генерира нов регистрационен файл. Броят на съхраняваните регистрационни файлове може да бъде променен за регистрационните файлове на SQL Server, като се използва изразът на еквивалентния GUI по-долу (фиг. 1). За да отворите този GUI в Object Explorer, щракнете с десния бутон върху Управление , изберете SQL Server Error Log и щракнете върху Конфигуриране .
Фигура 1. Регистрации за последните шест грешки
Всеки регистрационен файл се генерира при рестартиране и се съхранява физически в C: \Program Files\ Microsoft SQL Server\MSSQL14.
По време на стартирането на екземпляра, двигателят записва ключова информация в регистъра на грешките, който ще включва:
Подробности за версията на SQL Server Производител на системата
- ID на процес на SQL сървър
- Номер на порт, който се използва
- Режим на удостоверяване
- Параметри за стартиране на регистъра
- Акаунт за услуга
- Открити размер на процесора и паметта
- Състояние на ключовите опции, напр. Големи страници, разширение на буферния пул, OLTP в паметта и др.
Тази информация може да бъде много полезна, когато просто искате бързо да разберете за някой от тях от екземпляра, който ви е представен.
Конфигуриране на опции за регистър на грешки
Както бе споменато по-рано, някои аспекти на SQL дневника за грешки и дневника на агента могат да се конфигурират. В моята среда ние задаваме NumErrorLogs до 30, защото искаме последните тридесет дни дневници да се запазват ежедневно. Ние гарантираме, че всеки регистрационен файл съдържа данните за един ден, като стартираме sp_cycle_errorlog (и sp_cycle_agent_errorlog) в полунощ, използвайки задание на агент. Списък 3 показва подробностите за тази работа. Тези съхранени процедури също могат да бъдат доста полезни за изрично циклиране на регистрационния файл за грешки, когато искате да възпроизведете проблем и да го наблюдавате как се разгръща (т.е. преди ескалиране до SQL Profiler или разширени събития).
-- Листинг 1:Конфигуриране на NumErrorLogsUSE [master]GOEXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_0DWORD>
Фигура 2. Задаване на максимален брой регистрационни файлове за грешки
Регистърът на грешките на SQL агента може да бъде конфигуриран за известно ниво на детайлност чрез щракване с десния бутон върху SQL Server Agent , и след това Регистъри за грешки и изберете Конфигуриране от менюто. Списък 2 и Фиг. 2 показват как да промените нивото на регистриране.
-- Листинг 2:Настройка на ниво на регистриране на грешкиUSE [msdb]GOEXEC msdb dbo.sp_set_sqlagent_properties @errorlogging_level 7 GO
Фигура 3. Задаване на опции за регистрационни файлове за грешки на SQL агент
-- Списък 3/* Създаване на задание за циклични регистрационни файлове за сървър и агент */USE [msdb]GO/****** Обект:Задача [Cycle Error Logs] Дата на скрипт:25.01.2015 г. 15:40:34 ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/****** Обект:JobCategory [[Uncategorized (Local)]]] Дата на скрипта:25.01.2015 15:40:34 ******/АКО НЕ СЪЩЕСТВУВА (ИЗБЕРЕТЕ име ОТ msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' ANDcategory_class 1BEGINEXEC @ReturnCode =msdb dbo sp_add_category @class N'JOB', N'LOCAL',@name=N'[Uncategorized (Local)]'IF (@@ГРЕШКА <> 0 ИЛИ @ReturnCode <> 0) ОТИДИТЕ QuitWithRollbackENDDECLARE @jobId BINARY(16EXEC @ReturnCode =msdb dbo sp_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'Няма налично описание.',@tecal_log' N'COMPANYDOMAIN\kigiri', @job_id =@jobId ИЗХОД АКО (@@ГРЕШКА <> 0 ИЛИ @ReturnCod e <> 0) ОТИДЕТЕ QuitWithRollback /****** Обект:Стъпка [Стъпка 1] Дата на скрипта:25.01.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@_attempos_ru_n,@retry@stryosystem'N_val command=N'EXEC master.sys.sp_cycle_errorlog GOEXEC msdb.dbo.sp_cycle_agent_errorlogGO',@database_name=N'master',@flags 0IF (@@ERROR <> 0 ИЛИ @ReturnCode <> 0) GOTO sp_update_job @job_id =@jobId @start_step_id =1IF (@@ERROR <> 0 ИЛИ @ReturnCode <> 0) ОТИДИТЕ QuitWithRollbackEXEC @ReturnCode =msdb dbo sp_add_jobschedule @Id_name @job_name @job_name @job_name @job_id ,@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 [email protected]_uid=N'f3eb3e85-9875-4cf5-a789-8c558b772d27'IF (@@ГРЕШКА <> 0 ИЛИ @ReturnCode <> 0) GOTO QuitWithRollbackEXEC =name @Return_serverbjo I '(local)' IF (@@ERROR <> 0 ИЛИ @ReturnCode <> 0) ОТИДИТЕ QuitWithRollback COMMIT TRANSACTIONGOTO EndSaveQuitWithRollback:IF (@@TRANCOUNT> 0) ROLLBACK TRANSACTIONEndSave:GO/* Промяна на максимален брой регистрационни файлове на Er0 /USE [master]GOEXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 30 GO/* Задаване на дължината на хронологията на jo и свойствата на агента */EX. '2015-11-28T19:29:00'GOUSE [msdb]GOEXEC msdb dbo.sp_set_sqlagent_properties @jobhistory_max_rows 10000, @jobhistory_max_rows_per_job 1000GO„Изливане“ през трупи
Запознаването с дневника за грешки е полезно за идентифициране на неща като елементите, изброени във втория раздел, или за наблюдение на такива събития като възстановяването на голяма база данни. Но когато търсите конкретен елемент, като например грешки при влизане или подобни грешки, скрити в морето от регистрационни файлове, може да искате да използвате филтъра или търсене способност.
Фигура 4. Филтриране и търсене
Търсене би било полезно, когато търсите конкретен номер на грешка или текст. Търсенето връща появяванията на елемента, изискван от ред по ред. Когато трябва да стесните списъка с грешки, използвайки специфични критерии, използвайте филтъра. Можете да филтрирате по връзка , дата или общо подробности.
Фигура 5. Критерий за търсене
Фигура 6. Критерий за филтър
Когато екземплярът не успее
Един добър въпрос, който би задал запален читател, е какво се случва, когато SQL Server не успее да се стартира? Как да прегледаме дневниците? Е, така се случва, че освен факта, че регистрационните файлове за грешки се записват в плоски файлове, чийто път е посочен по-рано, можете също да видите регистрационните файлове на сървъра и агента в Windows Event Viewer. Всичко, което трябва да направите, е да филтрирате регистрите на приложения за преглед на събития за събития с източник MSSQLSERVER. В по-напреднала среда регистрационните файлове на SQL Server, както всички други регистрационни файлове на Windows, могат да се съхраняват в инструмент на трета страна като SEIM или Splunk. Това прави нещата много по-лесни. Започвайки със SQL Server 2012, също така е възможно да се преглеждат офлайн регистрационни файлове за грешки от друг екземпляр изцяло, като се използват регистрирани сървъри, както и WMI и WQL.
Фигура 7. Преглед на регистрационни файлове на SQL Server в Event Viewer
Заключение
Регистърът на грешките на SQL Server може да се счита за отправна точка за отстраняване на често срещани грешки. Други регистрационни файлове, като файлове за проследяване, генерирани от SQL Trace или заснети от SQL Profiler или Extended Events Session, дават много повече подробности за това, което се случва вътре в двигателя. Има и специфични регистрационни файлове като тези, свързани с Database Mail или Replication. Въпреки че всички те са много полезни за отстраняване на проблеми в SQL Server, бих препоръчал SQL Server Error Logs като чудесна отправна точка.
Препратки
Преглед на регистъра за грешки на SQL Server
Преглед на офлайн регистрационни файлове
Дневник за грешки в цикъла на Sp
Дневник за грешки на агента на Sp цикъл
Път за инсталиране по подразбиране на SQL Server