Asunto
Cuando SQL Server atiende solicitudes de muchos clientes, existe una gran posibilidad de que se produzcan conflictos debido a diferentes procesos.
solicitar acceso a los mismos recursos al mismo tiempo. Un conflicto en el que un proceso espera a que otro libere un recurso se denomina bloque.
Aunque en SQL Server un proceso bloqueado generalmente se resuelve solo cuando el primer proceso libera el recurso, hay ocasiones en las que un proceso
mantiene un bloqueo de transacción y no lo libera.
Línea de producto
Struxureware Power Monitoring 7.0.x
Power Monitoring Expert 7.2.x, 8.x, 9.x, 2021, 2022
ION Enterprise 6.0. x
ION EEM
Ambiente
SQL Server 2005, SQL Server 2008 R 2, SQL Server 2012, SQL Server 2014, SQL Server 2016, SQL Server 2017
Causa
El bloqueo ocurre cuando una o más sesiones solicitan un bloqueo en un recurso, como una fila, página o tabla, pero SQL Server no puede otorgar ese bloqueo porque
otra sesión ya tiene un bloqueo no compatible en ese recurso.
Resolución
*Advertencia: Pueden producirse daños irreparables en la base de datos. Este procedimiento sólo lo deben realizar usuarios familiarizados con SQL Server Management Studio. Se debe realizar una copia de seguridad de las bases de datos antes de realizar este procedimiento.*
Para resolver un proceso bloqueado, primero debemos determinar qué proceso es el proceso de bloqueo y luego, si es posible, eliminar el proceso de bloqueo.
Para determinar qué proceso es el proceso de bloqueo, inicie sesión en SQL Server Management Studio y ejecute el script SQL adjunto (Blocking.sql).
Alternativamente, ejecute las consultas siguientes:
Script para encontrar todos los procesos bloqueados:
Script para identificar la consulta de bloqueo:
Script para ver todos los procesos/sesiones actuales en el servidor:
Cuando SQL Server atiende solicitudes de muchos clientes, existe una gran posibilidad de que se produzcan conflictos debido a diferentes procesos.
solicitar acceso a los mismos recursos al mismo tiempo. Un conflicto en el que un proceso espera a que otro libere un recurso se denomina bloque.
Aunque en SQL Server un proceso bloqueado generalmente se resuelve solo cuando el primer proceso libera el recurso, hay ocasiones en las que un proceso
mantiene un bloqueo de transacción y no lo libera.
Línea de producto
Struxureware Power Monitoring 7.0.x
Power Monitoring Expert 7.2.x, 8.x, 9.x, 2021, 2022
ION Enterprise 6.0. x
ION EEM
Ambiente
SQL Server 2005, SQL Server 2008 R 2, SQL Server 2012, SQL Server 2014, SQL Server 2016, SQL Server 2017
Causa
El bloqueo ocurre cuando una o más sesiones solicitan un bloqueo en un recurso, como una fila, página o tabla, pero SQL Server no puede otorgar ese bloqueo porque
otra sesión ya tiene un bloqueo no compatible en ese recurso.
Resolución
*Advertencia: Pueden producirse daños irreparables en la base de datos. Este procedimiento sólo lo deben realizar usuarios familiarizados con SQL Server Management Studio. Se debe realizar una copia de seguridad de las bases de datos antes de realizar este procedimiento.*
Para resolver un proceso bloqueado, primero debemos determinar qué proceso es el proceso de bloqueo y luego, si es posible, eliminar el proceso de bloqueo.
Para determinar qué proceso es el proceso de bloqueo, inicie sesión en SQL Server Management Studio y ejecute el script SQL adjunto (Blocking.sql).
Alternativamente, ejecute las consultas siguientes:
Script para encontrar todos los procesos bloqueados:
SELECT
spid,
status,
loginame=SUBSTRING(loginame,1,12),
hostname=SUBSTRING(hostname,1, 12),
blk = CONVERT(char(3), blocked),
dbname=SUBSTRING(DB_NAME(dbid),1, 10),
cmd,
waittype
FROM master.dbo.sysprocesses
WHERE spid IN (SELECT blocked FROM master.dbo.sysprocesses)
Script para identificar la consulta de bloqueo:
SELECT
db.name DBName,
tl.request_session_id,
wt.blocking_session_id,
OBJECT_NAME(p.OBJECT_ID) BlockedObjectName,
tl.resource_type,
h1.TEXT AS RequestingText,
h2.TEXT AS BlockingTest,
tl.request_mode
FROM sys.dm_tran_locks AS tl
INNER JOIN sys.databases db ON db.database_id = tl.resource_database_id
INNER JOIN sys.dm_os_waiting_tasks AS wt ON tl.lock_owner_address =wt.resource_address
INNER JOIN sys.partitions AS p ON p.hobt_id =tl.resource_associated_entity_id
INNER JOIN sys.dm_exec_connections ec1 ON ec1.session_id =tl.request_session_id
INNER JOIN sys.dm_exec_connections ec2 ON ec2.session_id =wt.blocking_session_id
CROSS APPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle) AS h1
CROSS APPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle) AS h2
GO
Script para ver todos los procesos/sesiones actuales en el servidor:
select * from master.dbo.sysprocesses
Publicado para:Schneider Electric Argentina

