DBAtlas · Atlas de operaciones de bases de datos

Encontrar sesiones bloqueantes / en espera de bloqueo

Oracle

SELECT blocking_session, sid, serial#, username,
       sql_id, seconds_in_wait, event
FROM v$session
WHERE blocking_session IS NOT NULL;

Una sesión con blocking_session informado está bloqueada por el SID indicado en el valor de blocking_session.

PostgreSQL

SELECT pid, usename, pg_blocking_pids(pid) AS blocked_by,
       wait_event, query
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;

El array blocked_by contiene los PID que bloquean a este pid.

MySQL

SELECT * FROM sys.innodb_lock_waits\G
-- MySQL 8: SELECT * FROM performance_schema.data_lock_waits;

El esquema sys presenta de forma legible el trx_id / thread en espera y el bloqueante.

SQL Server

SELECT r.session_id, r.blocking_session_id,
       r.wait_type, r.wait_time, r.wait_resource
FROM sys.dm_exec_requests r
WHERE r.blocking_session_id <> 0;

Las solicitudes con blocking_session_id <> 0 están bloqueadas. Se puede construir una consulta recursiva para seguir la cadena.

MongoDB

db.currentOp({ "waitingForLock": true })

WiredTiger bloquea a nivel de documento/colección. Puede terminar operaciones largas con killOp.

Redis

# Not applicable: Redis commands run atomically one at a time; there are no row locks.
# Closest diagnostic: SLOWLOG GET 10

El bloqueo suele deberse a un único comando de larga duración (p. ej., KEYS *, un SORT grande); SLOWLOG los muestra.

Abrir en DBAtlas →