我想如果可以从sql server里面找出sql server运行了多长时间。
对于未使用的索引,我希望将其与其中一个DMV结合使用,但每次加载sql server时都会重置set,所以我想知道它们有多么有用。
答案 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'
答案 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'