Три начина за определяне на последното начално време на услугите на SQL Server, Windows IT Pro

Нека сравним изгледите sys.databases, sys.dm_exec_sessions и sys.dm_os_sys_info

Има поне три лесни начина да определите кога услугата SQL Server е била последно рестартирана на екземпляр на SQL Server. Оставям избора между двата изгледа за динамично управление и изгледа на системния каталог на читателя. Защо се нуждаете от тази информация? Много диагностични заявки изискват познаване на времевата рамка, в която са дефинирани показателите за ефективност. Някои метаданни за производителността на системата, а именно динамични обекти за управление, се изтриват, когато услугата се прекрати. Когато анализирате използването на индекса, за да оцените използването му в заявки за търсене или обхождане, трябва да знаете дали решението за изхвърляне на „неизползвани“ данни от индекс (въз основа на резултатите от заявка sys.dm_db_index_usage_stats) се основава на статистически значим диапазон от данни. Ако нивата на използване на индекса се определят само за няколко дни или седмици, тогава заключението за степента на неговото използване може да е неправилно, тъй като много заявки може да се отнасят до задачи, които не попадат в интервала на вземане на проби.

Имайки това предвид, помислете за три начина за получаване на тази информация.

Първи начин: sys.databases

Системният изглед на каталога sys.databases в SQL Server 2005 и по-късно ви позволява да получите метаданни за всяка база данни в конкретен екземпляр на SQL Server. Тъй като базата данни tempdb се създава отново всеки път, когато услугите се рестартират, времето, когато е създадено, може да се използва, за да се определи кога услугите са стартирани последно.

Втори начин:sys.dm_exec_sessions

Този динамичен изглед съдържа информация за сесии на даден екземпляр на SQL Server. Тъй като първата сесия се инициира при стартиране на услугата SQL Server, можете да използвате стойността в колоната login_time (време за влизане) като последния път, когато услугата SQL Server е стартирана.

Трети начин: sys.dm_os_sys_info(SQL Server 2014)

Започвайки с SQL Server 2005, схемата на този динамичен изглед се променя с всяко основно издание (както и кумулативни актуализации (CU) и сервизни пакети (SP)). Въпреки това, като се започне от SQL Server 2014, този изглед включва колоната sqlserver_start_time, която предоставя информация за това кога услугата е била стартирана последно.

Ако сравните резултатите от тези три заявки, можете да видите, че данните са различни (вижте Фигура 1). Това е лесно обяснимо, ако анализираме източниците на данни.

начина
Екран 1: Сравняване на резултатите от три заявки

Последният резултат показва най-ранното време и е по-стар от втория резултат с почти две секунди. Това е началният час на услугата, взет от колоната sql_server_start_time в резултата от заявката sys.dm_os_sys_info и съответства на действителния начален час на услугата SQL Server.

Вторият резултат показва време почти две секунди след стартирането на услугите, съответстващо на началото на първата сесия. Това показва, че има интервал от приблизително две секунди между началото на услугите и първата сесия на свързване.

Първият резултат носи информация за момента, настъпил около две секунди след началото на първата сесия. Това е моментът да създадете базата данни tempdb.

Въпреки че резултатите варират донякъде, и DBAsса много строги, едва ли ще имате нужда от милисекунда точност при определяне на началния час на услугите на SQL Server, така че бих нарекъл всеки от тези източници на информация надежден. Обикновено използвам получената начална дата във формулата DATEDIFF(), както е показано на Фигура 2, за да посоча броя на дните, през които услугата на SQL Server се изпълнява. Този брой дни може да се използва като знаменател за осредняване на показатели, като например броя сканирания на индекс на ден (в резултат на заявката sys.dm_db_index_usage_stats, спомената по-горе) или I/O натоварването на ден от изхода на заявката sys.dm_io_virtual_file_stats. Не забравяйте да изключите делението на нула, като използвате синтаксиса, показан по-долу.

Екран 2: Определяне на броя дни, в които услугата на SQL Server е активна

Споделяйте материал с колеги и приятели