Три способи визначити час останнього запуску SQL Server, Windows IT Pro
Порівняємо уявлення sys.databases, sys.dm_exec_sessions та sys.dm_os_sys_info
Існує щонайменше три простих способи визначення часу останнього перезапуску служби SQL Server на екземплярі SQL Server. Вибір між двома динамічними адміністративними уявленнями Dynamic Management View та системним каталогом System Catalog View залишаю за читачем. Навіщо потрібна ця інформація? Багато діагностичних запитів вимагають знання тимчасових рамок, у яких було визначено метрики продуктивності. Деякі метадані про продуктивність системи, а саме динамічні об'єкти керування Dynamic Management Objects, після завершення роботи служби видаляються. Аналізуючи використання індексу для оцінки його застосування в запитах пошуку або сканування, необхідно знати, чи приймається рішення про доцільність вивантаження даних про індекс, що «не використовується» (за результатами запиту sys.dm_db_index_usage_stats) на підставі статистично значущого діапазону даних. Якщо показники застосування індексу визначені лише за кілька днів або тижнів, то висновок про ступінь його використання може виявитися некоректним, оскільки багато запитів можуть належати до завдань, які не потрапляють до інтервалу вибірки.
З урахуванням сказаного розглянемо три способи одержання цієї інформації.
Перший спосіб: sys.databases
Системне уявлення каталогу sys.databases в SQL Server 2005 і новішої версії дозволяє отримати метадані про кожну базу даних у межах конкретного екземпляра SQL Server. Оскільки база даних tempdb створюється знову при перезапуску служб, за часом її створення можна визначити час останнього запуску служб.
Другий спосіб:sys.dm_exec_sessions
Це динамічне уявлення містить інформацію про сеанси на даному екземплярі SQL Server. Так як перший сеанс ініціюється під час запуску служби SQL Server, в якості часу останнього запуску служби SQL Server можна використовувати значення, вказане в стовпці login_time (час реєстрації).
Третій спосіб: 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.
Хоча результати дещо різняться, а адміністратори баз данихвідрізняються скрупульозністю, навряд чи вам знадобиться мілісекундна точність у визначенні часу запуску служб SQL Server, тому я б назвав достовірним будь-яке з цих джерел інформації. Отриману дату запуску зазвичай використовую у формулі DATEDIFF (), як показано на екрані 2, щоб вказати число днів, протягом яких служба SQL Server працювала. Цю кількість днів можна використовувати як знаменник для усереднення метрик, таких як число сканувань індексу за день (результат виконання згаданого вище запиту sys.dm_db_index_usage_stats) або завантаження введення-виводу за день за вихідними даними запиту sys.dm_io_virtual_file_stats. Не забудьте виключити поділ на нуль, використовуючи наведений нижче синтаксис.
| Екран 2. Визначення числа днів роботи SQL Server |
Поділіться матеріалом з колегами та друзями
