从t-sql中了解sql server服务运行了多长时间

时间:2009-06-24 07:13:16

标签: sql-server sql-server-2005

我想如果可以从sql server里面找出sql server运行了多长时间。

对于未使用的索引,我希望将其与其中一个DMV结合使用,但每次加载sql server时都会重置set,所以我想知道它们有多么有用。

6 个答案:

答案 0 :(得分:19)

SELECT
    login_time
FROM
    sys.dm_exec_sessions
WHERE
    session_id = 1

会在服务器启动时为您提供datetime

答案 1 :(得分:4)

要以编程方式获取它,您可以运行此脚本。它会检查tempdb的创建时间,因为每次启动Sql Server时都会重新初始化tempdb。

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'

来源:How long SQL Server has been running

答案 2 :(得分:1)

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

以上内容适用于SQL Server 2000,2005和2008。

逻辑是上述SQL的结果返回tempdb数据库的创建日期,SQL Server每次重新启动时都会重新创建。因此,tempdb的创建日期是服务器的启动时间。

答案 3 :(得分:1)

我知道这已经很老了,但是自从提出这个问题以来,Microsoft就添加了带有此信息的新DMV。

SELECT dosi.sqlserver_start_time
FROM sys.dm_os_sys_info AS dosi

答案 4 :(得分:0)

抓住here

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

答案 5 :(得分:0)

这个简单的查询适用于SQL Server 2005之前的版本以及最近的版本:

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