<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://petersap.nl/SybaseWiki/index.php?action=history&amp;feed=atom&amp;title=Sp_block--check_analyse_blocked_processes</id>
		<title>Sp block--check analyse blocked processes - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://petersap.nl/SybaseWiki/index.php?action=history&amp;feed=atom&amp;title=Sp_block--check_analyse_blocked_processes"/>
		<link rel="alternate" type="text/html" href="http://petersap.nl/SybaseWiki/index.php?title=Sp_block--check_analyse_blocked_processes&amp;action=history"/>
		<updated>2026-04-04T20:55:23Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>http://petersap.nl/SybaseWiki/index.php?title=Sp_block--check_analyse_blocked_processes&amp;diff=1862&amp;oldid=prev</id>
		<title>Bobh: Initial version.</title>
		<link rel="alternate" type="text/html" href="http://petersap.nl/SybaseWiki/index.php?title=Sp_block--check_analyse_blocked_processes&amp;diff=1862&amp;oldid=prev"/>
				<updated>2009-02-23T12:17:30Z</updated>
		
		<summary type="html">&lt;p&gt;Initial version.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This sp checks for blocked processes and, if found, returns the spid info, sql text and query plan.  It requires sp__mon_sql2 and sp__capture_sql.&amp;lt;br&amp;gt;&lt;br /&gt;
It could do with some extra work to filter out the spids which are not the root blocking spids; it can produce a large amount of output if there are a high number of individual spids involved in a chain of blocks.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
create proc sp__block&lt;br /&gt;
as&lt;br /&gt;
------------------------------&lt;br /&gt;
-- Procedure: sp__block&lt;br /&gt;
--   Created: April 2008&lt;br /&gt;
--    Author: Bob Holmes&lt;br /&gt;
-- Last modification: &lt;br /&gt;
-- Dependencies: sp__mon_sql2, sp__capture_sql&lt;br /&gt;
------------------------------&lt;br /&gt;
declare @numblocks int&lt;br /&gt;
select @numblocks = count(*) from master..sysprocesses where blocked &amp;lt;&amp;gt; 0&lt;br /&gt;
-- list blocked processes&lt;br /&gt;
print &amp;quot; %1! Blocked Processes&amp;quot;, @numblocks&lt;br /&gt;
print &amp;quot; ==============================================================================================&amp;quot;&lt;br /&gt;
print &amp;quot;                                                                      duration&amp;quot;&lt;br /&gt;
select spid,&lt;br /&gt;
convert(char(12),suser_name(suid)) login,&lt;br /&gt;
convert(char(16),db_name(dbid)) db,&lt;br /&gt;
hostname,&lt;br /&gt;
blocked &amp;quot;blocked by&amp;quot;,&lt;br /&gt;
convert(varchar(9),StartTime,108) StartTime,&lt;br /&gt;
right( replicate(&amp;quot;0&amp;quot;, 2) + convert(varchar(2),(time_blocked/60/60)),2)&lt;br /&gt;
  + &amp;quot;:&amp;quot;&lt;br /&gt;
  +right( replicate(&amp;quot;0&amp;quot;, 2) + convert(varchar(2),((time_blocked/60)-((time_blocked/60/60)*60))),2)&lt;br /&gt;
  + &amp;quot;:&amp;quot;&lt;br /&gt;
  + right( replicate(&amp;quot;0&amp;quot;, 2) + convert(varchar(2),(time_blocked%60)),2) &amp;quot;hh:mm:ss&amp;quot;,&lt;br /&gt;
cmd Command&lt;br /&gt;
from master..sysprocesses, master..monProcessStatement&lt;br /&gt;
where blocked &amp;lt;&amp;gt; 0&lt;br /&gt;
and spid = SPID&lt;br /&gt;
&lt;br /&gt;
if @numblocks &amp;lt;&amp;gt; 0&lt;br /&gt;
begin&lt;br /&gt;
 --prep list of blocking spids&lt;br /&gt;
  select distinct blocked into #blockingspids from master..sysprocesses where blocked &amp;lt;&amp;gt; 0&lt;br /&gt;
  declare @spid int&lt;br /&gt;
 --get spid info: summary, sql, query plan&lt;br /&gt;
  select @spid = min(blocked) from #blockingspids&lt;br /&gt;
  while @spid &amp;gt;= (select min(blocked) from #blockingspids)&lt;br /&gt;
  begin&lt;br /&gt;
    print &amp;quot;&amp;quot;&lt;br /&gt;
    exec sp__mon_sql2 @spid&lt;br /&gt;
    exec sp__capture_sql @spid&lt;br /&gt;
    exec sp_showplan @spid, null, null, null&lt;br /&gt;
    print &amp;quot;Tables in use by Spid %1!&amp;quot;, @spid&lt;br /&gt;
    print &amp;quot;-----------------------------&amp;quot;&lt;br /&gt;
    select&lt;br /&gt;
    a.SPID,&lt;br /&gt;
    convert(char(12),a.Login) Login,&lt;br /&gt;
    convert(char(15),a.ClientHost),&lt;br /&gt;
    convert(char(15),a.ClientIP) ClientIP,&lt;br /&gt;
    convert(char(15),b.DBName) DBName,&lt;br /&gt;
    b.ObjectName,&lt;br /&gt;
    c.LogicalReads,&lt;br /&gt;
    c.PhysicalReads,&lt;br /&gt;
    c.PhysicalWrites,&lt;br /&gt;
    b.TableSize&lt;br /&gt;
    from master..monProcessLookup a, master..monProcessObject b, master..monProcessActivity c&lt;br /&gt;
    where a.SPID = b.SPID&lt;br /&gt;
    and b.SPID = c.SPID&lt;br /&gt;
    and a.SPID = @spid&lt;br /&gt;
    order by c.PhysicalWrites desc&lt;br /&gt;
&lt;br /&gt;
    if (@spid = (select max(blocked) from #blockingspids)) or (@spid = null)&lt;br /&gt;
      break&lt;br /&gt;
    select @spid = min(blocked) from #blockingspids where blocked &amp;gt; @spid&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category:ASE]]&lt;/div&gt;</summary>
		<author><name>Bobh</name></author>	</entry>

	</feed>