Cómo liberar el punto muerto en SQL Server
Los interbloqueos de SQL Server causan problemas que encontramos a menudo. Aquí presentaremos cómo consultar los interbloqueos de SQL Server. Espero que le resulte útil para aprender sobre los interbloqueos de SQL Server.
Los interbloqueos de SQL Server. método de consulta
exec master dbo p_lockinfo muestra procesos estancados pero no muestra procesos normales
exec master dbo p_lockinfo elimina procesos estancados pero no muestra procesos normales
Cómo para liberar el punto muerto en SQL Server
Crear proc p_lockinfo
@kill_lock_spid bit= Si se debe eliminar el proceso bloqueado Solo visualización
@ show_spid_if_nolock bit= Si no hay un proceso de interbloqueo, no se muestra si se debe mostrar la información del proceso normal
como
declare @count int @s nvarchar( ) @i int
Seleccionar id=identidad (int) bandera
ID de proceso=spid ID de hilo=kpid Bloquear ID de proceso=bloqueado ID de base de datos=dbid
Nombre de base de datos = db_name (dbid) Usuario ID = uid Nombre de usuario = logine Tiempo de CPU acumulado = cpu
Tiempo de inicio de sesión = login_time Número de transacciones abiertas = open_tran Estado del proceso = estado
Nombre de la estación de trabajo = nombre de host nombre de la aplicación = nombre del programa proceso de la estación de trabajo ID=procesohost
nombre de dominio=nt_dominio dirección de tarjeta de red=dirección_net
en #t desde(
seleccione bandera=proceso de bloqueo
spid kpid a bloqueado dbid uid nombre de usuario cpu login_time open_tran
estado nombre de host nombre_programa proceso de host dominio_nt_dirección de red
s = a spid s =
from mastersysprocesses a join ( p>
seleccione bloqueado del grupo mastersysprocesses por bloqueado
) b en a spid=b bloqueado donde a bloqueado=
union all
p>
select |_victim_>
spid kpid bloqueado dbid uid nombre de usuario cpu tiempo_de_conexión open_tran
estado nombre de host nombre_programa proceso de host dominio_nt dirección_de red
s = bloqueado s =
de mastersysprocesses a donde bloqueado<>
) un pedido por s s
select @count=@@rowcount @i=
if @count = y @s
how_spid_if_nolock=
comenzar
insertar #t
seleccionar bandera = proceso normal
spid kpid bloqueado dbid db_name (dbid) uid nombre de usuario cpu login_time
estado de open_tran nombre de host nombre_programa proceso de host dominio_nt_dirección de red
de mastersysprocesses
establecer @count=@@rowcount
end
if @count>
comenzar
crear tabla #t (id int identidad ( ) a nvarchar ( ) b Int EventInfo nvarchar ( ))
if @kill_lock_spid=
comenzar
declarar @spid varchar() @flag varchar()
while @i<=@count
comenzar
seleccione @spid=ID de proceso @flag=bandera de #t dondeid=@i
inserte #t exec(dbcc inputbuffer(+@spid+))
if @flag=ejecutivo de proceso bloqueado (kill +@spid)
set @i=@i+
end
end
p>
else
mientras @i<=@count
comienza
selecciona @s= dbcc inputbuffer (+cast (ID de proceso como varchar) + ) de #t dondeid=@i
insert #t exec (@s)
set @i=@i+
fin
seleccione una * instrucción SQL de proceso=b EventInfo
de #t a join #t b en a id=b id lishixinzhi/Article/program/SQLServer/201311/22183