• Try this stored procedure:

    (where PerfDB is my database for differend kind of administrative task)

    and make a job with that stored procedure, and run this job at every minute, and you will have a real time monitor of bloking.

    USE [PerfDB]

    GO

    /****** Object: StoredProcedure [dbo].[BD_Monitorizare_Blocaje] Script Date: 10/10/2007 12:59:36 ******/

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    CREATE procedure [dbo].[BD_Monitorizare_Blocaje]

    as

    declare @spid int

    declare @blk_by int

    declare @spid2 int

    declare @buffer1 varchar(8000)

    declare @buffer2 varchar(8000)

    declare @sql1 varchar(8000)

    declare @sql2 varchar(8000)

    declare @login1 varchar(50)

    declare @login2 varchar(50)

    declare @database_name varchar(20)

    declare @dbid int

    declare @sql5 varchar(8000)

    declare @sql6 varchar(8000)

    declare @hostname1 varchar(100)

    declare @hostname2 varchar(100)

    declare @program_name1 varchar(100)

    declare @program_name2 varchar(100)

    create table #BD_Monitorizare_Procese

    (

    spid varchar(50),

    login varchar(100),

    hostname varchar(100),

    program_name varchar(100),

    blk_by varchar(100),

    dbid varchar(100),

    last_batch datetime

    )

    insert into #BD_Monitorizare_Procese

    select

    spid

    ,convert(sysname, rtrim(loginame))

    ,hostname

    ,program_name

    ,blocked

    ,dbid

    , last_batch

    from master.dbo.sysprocesses with (nolock)

    where len(hostname)>0

    DECLARE xcursor CURSOR FOR

    SELECT spid FROM #BD_Monitorizare_Procese order by spid

    OPEN xcursor

    FETCH NEXT FROM xcursor INTO @spid

    WHILE (@@fetch_status = 0)

    BEGIN

    select @blk_by = blk_by from #BD_Monitorizare_Procese where spid=@spid

    if @blk_by <> 0

    begin

    select @login1 = login from #BD_Monitorizare_Procese where spid=@spid

    select @login2 = login from #BD_Monitorizare_Procese where spid=@blk_by

    select @dbid = dbid from #BD_Monitorizare_Procese where spid=@spid

    select @database_name = name from sys.sysdatabases where dbid=@dbid

    select @hostname1 = hostname from #BD_Monitorizare_Procese where spid=@spid

    select @hostname2 = hostname from #BD_Monitorizare_Procese where spid=@blk_by

    select @program_name1 = program_name from #BD_Monitorizare_Procese where spid=@spid

    select @program_name1 = program_name from #BD_Monitorizare_Procese where spid=@blk_by

    create table #dbcc(c1 varchar(20), c2 int, c3 varchar(8000))

    insert #dbcc EXEC('dbcc inputbuffer('+@spid+')')

    select @buffer1 = c3 from #dbcc

    delete from #dbcc

    insert #dbcc EXEC('dbcc inputbuffer('+@blk_by+')')

    select @buffer2 = c3 from #dbcc

    drop table #dbcc

    set @buffer1 = replace(@buffer1,'''','`')

    set @buffer2 = replace(@buffer2,'''','`' )

    --

    --declare @buffer1 varchar(8000)

    --declare @buffer2 varchar(8000)

    --declare @sql1 varchar(8000)

    --declare @sql2 varchar(8000)

    --declare @login1 varchar(50)

    --declare @login2 varchar(50)

    --declare @database_name varchar(20)

    --declare @dbid int

    --declare @sql5 varchar(8000)

    --declare @sql6 varchar(8000)

    --declare @hostname1 varchar(100)

    --declare @hostname2 varchar(100)

    --declare @program_name1 varchar(100)

    --declare @program_name2 varchar(100)

    --set @database_name='fffff'

    --set @login1='ddddd'

    --set @login2='gggggg'

    --set @hostname1='hhhhhhh'

    --set @hostname2='sssss'

    --set @buffer1='423423423324'

    --set @buffer2='55345323552'

    exec('exec PerfDB.dbo.BD_Send_Alert ''Este un blocaj pe baza '+@database_name+'. Userul '+@login1+' de pe statia '+@hostname1+' este blocat de '+@login2+' de pe statia '+@hostname2+' ! '+'Userul '+@login1+' executa: '+@buffer1+'. Userul '+@login2+' executa: '+@buffer2+'' +''''+ ','' BLOCAJ !!!''')

    --print 'exec PerfDB.dbo.BD_Send_Alert ''Este un blocaj pe baza '+@database_name+'. Userul '+@login1+' de pe statia '+@hostname1+' este blocat de '+@login2+' de pe statia '+@hostname2+' ! '+'Userul '+@login1+' executa: '+@buffer1+'. Userul '+@login2+' executa: '+@buffer2+'' +''''+ ','' BLOCAJ !!!'''

    -- set @sql1= 'EXEC master..xp_cmdshell ''net send CBOGDUM '''' Este un blocaj pe baza '+@database_name+' userul '+@login1+' este blocat de '+@login2+' !!'''

    -- exec (@sql1)

    --

    -- set @sql2=

    -- 'EXECUTE [msdb].[dbo].[sp_send_dbmail]

    -- @profile_name = ''MailAccount''

    -- ,@recipients = ''bogdan.dumitru@railoc.ro''

    -- ,@body = '' Este un blocaj pe baza '+@database_name+'! Userul '+@login1+' de pe statia '+@hostname1+' este blocat de '+@login2+' de pe statia '+@hostname2+' ! '+char(13)+char(13)+'Userul '+@login1+' executa: '+char(13)+@buffer1+char(13)+char(13)

    -- +' Userul '+@login2+' executa: '+char(13)+@buffer2+'''

    -- ,@subject = ''BLOCAJ!'''

    -- exec (@sql2)

    insert into BD_Monitorizare_Blocaje_tbl ( database_name, login1_blocat, login2_care_blocheaza, hostname_login1, hostname_login2, buffer_login1, buffer_login2 )

    values (@database_name, @login1, @login2, @hostname1, @hostname2, @buffer1, @buffer2 )

    FETCH NEXT FROM xcursor INTO @spid

    end

    else

    FETCH NEXT FROM xcursor INTO @spid

    END

    CLOSE xcursor

    DEALLOCATE xcursor

    --create table BD_Monitorizare_Blocaje_tbl

    --(

    --data datetime default getdate(),

    --database_name varchar(20),

    --login1_blocat varchar(50),

    --login2_care_blocheaza varchar(50),

    --hostname_login1 varchar(50),

    --hostname_login2 varchar(50),

    --buffer_login1 varchar(8000),

    --buffer_login2 varchar(8000),

    --program_name1 varchar(100),

    --program_name2 varchar(100)

    --)