Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo liberar el punto muerto en SQL Server

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 (

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