SQL Server uptime

Az uptime egy nagyon kedves és szeretett funkció számomra az operációs rendszerekben, jó látni, hogy mi mióta fut. Az SQL szerver esetében is lehet igény erre a szolgáltatásra, amit nem nehéz megvalósítani, ha egy aprócska tényt kihasználunk.

USE master

CREATE PROCEDURE sp_uptime
AS
DECLARE @up DATETIME
SELECT @up = login_time FROM sys.dm_exec_sessions WHERE session_id = 1

DECLARE @day varchar(4), @hour char(2), @minute varchar(10)
SELECT @minute = DATEDIFF(minute, @up, getdate())
SELECT @day = @minute / 1440, @minute = @minute % 1440, 
		@hour = @minute / 60, @minute = @minute % 60
PRINT @@SERVERNAME + ' has been up for ' + @day + ' day(s), ' + @hour + ' hour(s), ' + @minute + ' minute(s).'

Az alapötlet a hatodik sorban látható: az 1-es SPID-del rendelkező processz, a resource monitor a szerver indulásakor logol be, és ott is marad, amíg fut a SQL. Ezek után némi favágással a dátumot a megszokott uptime küllemre hoztam. A végén a print került be select helyett, mivel így nem kell azon bénázni, hogy az oszlopszélességet állítgassuk (persze aki szereti, írja át bátran). SQL 2000-nél a sys.dm_exec_sessions helyett master..sysprocesses van, session_id helyett pedig spid.
Azért a master adatbázis, mert így akárhol bemondhatjuk, hogy sp_uptime, az le fog futni, mivel az SQL minden sp_ kezdetű tárolt eljárást először a masterban keres, és csak aztán az aktuális adatbázisban. (Ezért nem jó ötlet sp_ kezdetű tárolt eljárásokat csinálni az alkalmazásainkhoz, mert mindig be fog nézni a masterba is a SQL szerver.)
Hogy mire használható? Öööö… fogalmam sincs. Én akkor találtam ki, amikor időnként megszakadt a kapcsolatom a szerverhez, ami amúgy is sztochasztikusan működött, néha újraindult, néha csak az oprendszer tűnt el a hálózatról, és jó volt tudni, hogy éppen hányadán állok a kis döggel.

Leave a comment