Узнайте, как долго работает сервер sql, от t-sql - PullRequest
12 голосов
/ 24 июня 2009

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

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

Ответы [ 5 ]

20 голосов
/ 24 июня 2009
SELECT
    login_time
FROM
    sys.dm_exec_sessions
WHERE
    session_id = 1

даст вам datetime, когда сервер был запущен.

4 голосов
/ 24 июня 2009

Чтобы получить его программно, вы можете запустить этот скрипт. Он проверяет время создания вашей базы данных 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 Server

1 голос
/ 24 июня 2009

SELECT crdate FROM sysdatabases WHERE [name] = 'tempdb'

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

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

0 голосов
/ 21 марта 2016

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

SELECT
 crdate AS startup,
 DATEDIFF(s, crdate, GETDATE()) / 3600. / 24 AS uptime_days
FROM master..sysdatabases
WHERE name = 'tempdb'
0 голосов
/ 24 июня 2009

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...