Technical Article

Script to output dbcc inputbuffer adding spid info

,

The following script will allow the user to get information from all spids that have a program name associated with them. That is event info out of dbcc inputbuffer. Additional columns may be added and used in the table through simple modifications of the script. I just found it useful for troubleshooting and setting up with a hotkey. This way I have quick access to finding out which process is running for given cpu cycles etc or program name. I have included the basic script. Additional functionality may be added to the script for additional benefit.

use master
go


alter procedure sp_inputbuffer
as

----------------------------------------------------------
----
-- THIS PROCEDURE WAS CREATED TO GET THE LATEST INPUT --
-- FROM THE VARIOUS PROCESSES RUNNING ON THE SERVER.--
-- IT COMBINES DBCC INPUT BUFFER WITH 
-- CREATED BY SCOTT DEXTER--
--     DATABASE CONSULTANT--
-- CREATED ON 2006-09-29--
-- ALL RIGHTS RESERVED BY SCOTT M. DEXTER ALL USERS     --
-- MUST SIGHT ME IN THE CREDITS FOR THIS PROCEDURE.     --
----------------------------------------------------------


declare @currentuser sysname
declare @currentprocedure sysname
declare @emailsubject varchar(30)
declare @emailmessage varchar(300)
declare @time varchar(20)
declare @recipients varchar(100)

select @time = convert(varchar(20), getdate(), 120)
select @currentuser = rtrim(suser_sname())
select @currentprocedure = object_name(@@procid)
set @recipients = 'sdexter@carrols.com'


------------------------------------------------------------------
-- CHECK THE PERMISSIONS OF THE PERSON EXECUTING THIS PROC.-- 
-- ONLY AUTHORIZED PERSONNEL WILL BE ALLOWED TO EXECUTE THIS--
-- PROCEDURE.--
------------------------------------------------------------------
if (not is_member('db_securityadmin') = 1) and
       (not is_member('db_owner') = 1)
begin
set @emailsubject = 'Security Violation.'
set @emailmessage = 'The following user: ""' + @currentuser + '""' + char(10) + char(13) + 
'does not have permission to run the following procedure: ""' + @currentprocedure + '""' + char(10) + char(13) + 
'at the following date and time.' + @time
goto hellodolly
end

-- CREATES TEMP TABLE TO INSERT DATA INTO. THE 
-- TABLE CAN BE ADDED TO FOR ADDITIONAL INFORMATION.
create table #inputbuffer
(
eventType varchar(255) ,
parameters int ,
procedureText varchar(255),
spid varchar(6)
)


declare @spid varchar(6)
declare @sql varchar(50)

-- CREATE CURSOR TO GET INFORMATION FROM DBCC INPUTBUFFER AND 
-- ADDITIONAL COLUMNS INTO THE TEMP TABLE FOR OUTPUT TO SYSADMINS
-- AND THOSE SO FORTUNATE TO BE GRANTED THE AUTHORITY OF DBO.
declare sprocket cursor fast_forward for 
select spid from master.dbo.sysprocesses
where program_name is null or program_name <> ''

open sprocket
fetch next from sprocket into
@spid

while @@fetch_status = 0
begin
set @sql = 'dbcc inputbuffer(' + @spid + ')'
insert into #inputbuffer(eventType, parameters, procedureText)
exec (@sql)

update #inputbuffer
set spid = @spid
where spid is null
-- ADDITIONAL UPDATES CAN BE PLACED HERE IF YOU SO DESIRE MORE INFORMATION.
-- PERSONALLY I THINK THAT THIS GIVES ME A GOOD PLACE TO START TO FIND ISSUES
-- THAT ARE GOING ON WHICH I CAN USE TO TROUBLESHOOT PERFORMANCE PROBLEMS OR 
-- OTHER.

fetch next from sprocket into
@spid
end

close sprocket
deallocate sprocket

-- CHECK TO SEE IF THE CURSOR IS STILL OPEN.
if @@cursor_rows <> 0
begin 
close sprocket
deallocate sprocket
end


-- OUTPUT THE INFORAMTION TO THE SCREEN FOR ANALYSIS.
select spid, eventType, parameters, procedureText
from #inputbuffer 



-- IF THE TABLE STILL EXISTS (WHICH IT SHOULD) THEN DROP IT.
if (object_id('tempdb..#tb1_sysprocesses') is not null)
            drop table #tb1_sysprocesses
return(0)

hellodolly:
begin
exec master.dbo.xp_sendmail @recipients = @emailrecipients,
@subject = @emailsubject,
@message = @emailmessage

RETURN -1
end

GO

Rate

Share

Share

Rate