Cómo ver y resolver bloqueos en SQL Server (sp_who2 y DMVs)
Cuando una sesion espera a otra, la aplicacion se siente lenta o congelada. Aqui identificas quien bloquea a quien y como liberarlo con cuidado.
- 1
Vista rapida con sp_who2
Muestra las sesiones activas y la columna BlkBy indica que SPID esta bloqueando. Es la primera parada para un vistazo rapido.
EXEC sp_who2; -- Fijate en la columna 'BlkBy': si tiene un numero, -- ese SPID esta esperando a otra sesion. - 2
Identifica la cadena de bloqueo con DMVs
sys.dm_exec_requests muestra que sesion esta bloqueada (blocking_session_id) y por cual espera. Mas preciso que sp_who2.
SELECT r.session_id AS bloqueada, r.blocking_session_id AS bloqueadora, r.wait_type, r.wait_time, r.wait_resource, t.text AS consulta FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t WHERE r.blocking_session_id <> 0; - 3
Inspecciona los locks especificos
sys.dm_tran_locks detalla que recursos estan bloqueados y en que modo (compartido, exclusivo, etc.).
SELECT resource_type, resource_database_id, request_mode, request_status, request_session_id FROM sys.dm_tran_locks WHERE request_status = 'WAIT'; - 4
Mira que hace la sesion bloqueadora antes de actuar
Entiende que esta ejecutando la sesion que bloquea. Solo como ultimo recurso, y con cuidado, se puede terminar con KILL.
-- Ver el ultimo comando de la sesion bloqueadora DBCC INPUTBUFFER(58); -- ULTIMO RECURSO: termina la sesion (hace rollback) -- KILL 58;
// el error común
KILL es destructivo: hace rollback de la transaccion abierta, y si es grande el rollback puede tardar tanto como la transaccion original. Nunca mates una sesion sin entender que hace. Muchos bloqueos vienen de transacciones largas o falta de indices, no de 'sesiones malas'.
// cuándo conviene un experto
Los bloqueos y deadlocks recurrentes suelen ser sintoma de un problema de diseño o de indices. En dba.mx diagnosticamos la causa raiz (no solo matamos sesiones) y la corregimos con techo cerrado para que no vuelva.
Agenda un Escaneo — desde USD $550Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.