Узнайте, как долго работает служба sql server из t-sql

Я хотел бы, если это возможно, чтобы работать изнутри sql server, как долго sql server работает.

хотел бы использовать это в сочетании с одним из DMV для неиспользуемых индексов, но счетчики переустанавливаются каждый раз при загрузке sql server, поэтому я хотел бы знать, насколько они будут полезны.

5 ответов


SELECT
    login_time
FROM
    sys.dm_exec_sessions
WHERE
    session_id = 1

даст вам datetime при запуске сервера.


чтобы сделать это программно, вы можете запустить этот скрипт. Он проверяет время создания tempdb, так как tempdb получает повторную инициализацию каждый раз при запуске Sql Server.

SELECT create_date 
FROM sys.databases 
WHERE name = 'tempdb'

чтобы сделать его более интуитивным, вы можете запустить сценарий ниже, который покажет вам, сколько дней и часов Sql Server работает. Информация о минутах и секундах будет усечена. Если вам это нужно, измените сценарий, чтобы получить его самостоятельно.

SELECT 'Sql Server Service has been running for about '
+ CAST((DATEDIFF(hh, create_date, GETDATE()))/24 AS varchar(3)) + ' days and '
+ CAST((DATEDIFF(hh, create_date, GETDATE())) % 24 AS varchar(2)) + ' hours'
FROM sys.databases 
WHERE name = 'tempdb'

источник: как долго SQL Сервер запущен


выше будет работать на SQL Server 2000, 2005 и 2008.

логика заключается в том, что результат вышеуказанного SQL возвращает созданную дату базы данных tempdb, которую SQL Server воссоздает каждый раз при перезапуске. Следовательно, дата создания tempdb - это время запуска сервера.


схватил здесь

USE Master
GO

SET NOCOUNT ON
DECLARE @crdate DATETIME, @hr VARCHAR(50), @min VARCHAR(5)
SELECT @crdate=crdate FROM sysdatabases WHERE NAME='tempdb'
SELECT @hr=(DATEDIFF ( mi, @crdate,GETDATE()))/60
IF ((DATEDIFF ( mi, @crdate,GETDATE()))/60)=0
SELECT @min=(DATEDIFF ( mi, @crdate,GETDATE()))
ELSE
SELECT @min=(DATEDIFF ( mi, @crdate,GETDATE()))-((DATEDIFF( mi, @crdate,GETDATE()))/60)*60
PRINT 'SQL Server "' + CONVERT(VARCHAR(20),SERVERPROPERTY('SERVERNAME'))+'" is Online for the past '+@hr+' hours & '+@min+' minutes'
IF NOT EXISTS (SELECT 1 FROM master.dbo.sysprocesses WHERE program_name = N'SQLAgent - Generic Refresher')
BEGIN
PRINT 'SQL Server is running but SQL Server Agent <<NOT>> running'
END
ELSE BEGIN
PRINT 'SQL Server and SQL Server Agent both are running'
END

этот простой запрос работает для версий до SQL Server 2005, а также для последних:

SELECT
 crdate AS startup,
 DATEDIFF(s, crdate, GETDATE()) / 3600. / 24 AS uptime_days
FROM master..sysdatabases
WHERE name = 'tempdb'