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 161Los 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 0CONEXIONES 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