Orac-alpha

 view release on metacpan or  search on metacpan

sql/Sybase/quickstats.10  view on Meta::CPAN


/************************************************************************\ 
 Procedure Name:	sp__quickstats
								          
 Author:		ed barlow

 Description:		
        prints quick statistics from server.  Useful for monitoring

\************************************************************************/ 
:r database
go
:r dumpdb
go
if exists (select *
           from   sysobjects
           where  type = "P"
           and    name = "sp__quickstats")
begin
    drop proc sp__quickstats
end
go

create proc sp__quickstats( @starttime datetime=NULL, @noconvert int=NULL ,
	@dont_format char(1) = null
	)
as

declare @conn int, @blk int, @locks int, @tlock int, @runnable int, @time1 datetime, @datestmp float, @mirror_name char(6)

set nocount on

select @time1=getdate()

select @conn=count(*)   from master..sysprocesses where suid>1
select @blk=count(*)    from master..sysprocesses where blocked!=0
select @locks=count(*)  from master..syslocks
select @runnable=count(*)  from master..sysprocesses where cmd!="AWAITING COMMAND" and suid>1
select @tlock=count(*) from master..syslocks where type=1

if exists (select * from master.dbo.sysdevices where status & 64 != 64)
	select @mirror_name='None'
else if exists (select * from master.dbo.sysdevices 
			  		 where cntrltype=0
						 and status & 64  = 64
				 		 and status & 256 = 256 )
begin
	 select @mirror_name='Broken'
end
else if exists (select * from master.dbo.sysdevices 
			  		 where cntrltype=0
						 and status & 64 = 64
				 		 and status & 512 != 512)
begin
	 select @mirror_name='Broken'
end
else select @mirror_name='Ok'

declare @lc float, @li float, @lidle float, @ldate datetime
select @ldate=max(date) from sybsystemprocs..record
select @lc = busy, @li =io, @lidle =idle
from   sybsystemprocs..record
where  date=@ldate

declare @ms_per_tick float
select @ms_per_tick = convert(int,@@timeticks/1000)

/* numbers here are scaled to give percents  */
select 	
	@lc			= ( @@cpu_busy * @ms_per_tick) / 1000 - @lc,
	@li			= ( @@io_busy * @ms_per_tick) / 1000 - @li,
	@lidle		= ( @@idle * @ms_per_tick) / 1000 - @lidle

declare @sumtimes float
select  @sumtimes =   @lc + @li +@lidle

if @starttime is not null
	  exec   sp__datediff @starttime,'m',@datestmp output
else select @datestmp=@sumtimes/60.0

if @sumtimes=0 
	select @sumtimes=1,@lc=1,@li=0,@lidle=0

if @noconvert is not null
begin
	select
		  	blocks=@blk,
		  	conn=@conn,
		  	ctime=datediff(ms,@time1,getdate()),
		  	locks=@locks,
		  	run=@runnable,
		  	tlock=@tlock,
			str(convert(float,(100*@lc))/@sumtimes,5,2) "%busy", 
			str(convert(float,(100*@li))/@sumtimes,5,2)  "%io ", 
			str(convert(float,(100*@lidle))/@sumtimes,5,2) "%idle", 
			"mirror"=@mirror_name,
			mins=@datestmp
end
else
begin

	select
		  	blks=convert(char(4),@blk),
		  	conn=convert(char(4),@conn),
		  	ctime=convert(char(6),datediff(ms,@time1,getdate())),
		  	locks=convert(char(5),@locks),
		  	run=convert(char(4),@runnable),
		  	tlock=convert(char(5),@tlock),
			"%cpu"=str(convert(float,(100*@lc))/@sumtimes,5,2),
			"%io"=str(convert(float,(100*@li))/@sumtimes,5,2) ,
			"%idle"=str(convert(float,(100*@lidle))/@sumtimes,5,2),
			/* "mirror"=@mirror_name, */
		  	minutes=ltrim(str(@datestmp,10,1))
end

exec sp__add_record "quickstats",2

go
grant execute on sp__quickstats to public
go



( run in 1.093 second using v1.01-cache-2.11-cpan-39bf76dae61 )