Ver SQLSERVER bloqueo y estancamiento del proceso y la ejecución de la pena

Antes de mirar el bloqueo y el estancamiento del proceso de entender un poco de conocimiento

sp_who

También puede especificar un nombre de usuario para ver parte de la información (ID de proceso, nombre de host, bases de datos, etc.)

sp_who en

sp_who2
también puede especificar un número específico para ver el proceso, tales como la visualización de algunos casos 161 ID de proceso (nombre de usuario, la base de datos, tiempo de CPU, número de disco, etc. IO)
sp_who2 161

Los resultados son como sigue:

SPID de estado de sesión NombreHost BlkBy DBName Comando CPUTime DiskIO LastBatch ProgramName SPID RequestID
161 dormir starishop TONY. TEST ESPERA DE COMANDO 2189 65 12/03 09:47:56: issLabelPrint 161 0    

CONEXIONES SELECT @@ - Controlar el número de conexiones de bases de datos desde el último lanzamiento de
MAX_CONNECTIONS SELECT @@ - Ver base de datos de número máximo de conexiones

* SELECT master..sysprocesses DONDE dbida EN (SELECCIONAR dbid DE master..sysdatabases donde nombre = 'test') - Ver prueba de conexión de base de datos condiciones de proceso

 sp_who_lock procedimientos almacenados, bloqueo de pantalla, almacenado situación de bloqueo:

CREATE procedure sp_who_lock   
as     
begin     
   declare @spid int     
   declare @blk int     
   declare @count int     
   declare @index int     
   declare @lock tinyint      
   set @lock=0      
   create table #temp_who_lock      
 (      
  id int identity(1,1),      
  spid int,      
  blk int     
 )      
 if @@error<>0 return @@error      
 insert into #temp_who_lock(spid,blk)      
 select 0 ,blocked       
 from (select * from master..sysprocesses where blocked>0)a      
 where not exists(select * from  master..sysprocesses where a.blocked =spid and blocked>0)      
 union select spid,blocked from  master..sysprocesses where blocked>0      
 if @@error<>0 return @@error      
 select @count=count(*),@index=1 from #temp_who_lock      
 if @@error<>0 return @@error      
 if @count=0      
 begin     
  select '没有阻塞和死锁信息'     
  return 0      
 end     
 while @index<=@count      
 begin     
  if exists(select 1 from #temp_who_lock a where id>@index and exists(select 1 from #temp_who_lock where id<=@index and a.blk=spid))      
  begin     
   set @lock=1      
   select @spid=spid,@blk=blk from #temp_who_lock where id=@index     
   select '引起数据库死锁的是: '+ CAST(@spid AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'     
   select  @spid, @blk    
   dbcc inputbuffer(@spid)      
   dbcc inputbuffer(@blk)      
  end     
  set @index=@index+1      
 end     
 if @lock=0       
 begin     
  set @index=1      
  while @index<=@count      
  begin     
   select @spid=spid,@blk=blk from #temp_who_lock where id=@index     
   if @spid=0      
    select '引起阻塞的是:'+cast(@blk as varchar(10))+ '进程号,其执行的SQL语法如下'     
   else      
    select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@blk AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'     
   dbcc inputbuffer(@spid)
   dbcc inputbuffer(@blk)      
   set @index=@index+1      
  end     
 end     
 drop table #temp_who_lock      
 return 0      
end   

Terminar proceso

SPID matanza 

 

Publicado 46 artículos originales · ganado elogios 9 · vistas 3639

Supongo que te gusta

Origin blog.csdn.net/weixin_41896770/article/details/103361918
Recomendado
Clasificación