Consulta / job de larga duración
Síntoma
Una sola consulta o job lleva horas ejecutándose sin terminar; consume recursos o afecta a otros.
1. Identifique la consulta y su duración
¿Qué consulta es, cuánto tiempo lleva ejecutándose, qué usuario/aplicación?
Oracle
SELECT sid, serial#, sql_id, last_call_et/60 running_min, username FROM v$session WHERE status='ACTIVE' AND type='USER' ORDER BY last_call_et DESC;PostgreSQL
SELECT pid, now()-query_start dur, usename, query FROM pg_stat_activity WHERE state='active' ORDER BY query_start;MySQL
SELECT id, user, time, state, info FROM information_schema.processlist WHERE command='Query' ORDER BY time DESC;SQL Server
SELECT session_id, total_elapsed_time/1000 sec, status, command FROM sys.dm_exec_requests WHERE session_id IN (SELECT session_id FROM sys.dm_exec_sessions WHERE is_user_process = 1) ORDER BY total_elapsed_time DESC;MongoDB
db.currentOp({ active: true, secs_running: { $gt: 60 } })2. ¿Avanza o está atascada?
¿Se está ejecutando realmente o espera un bloqueo? Revise los indicadores de progreso (Oracle v$session_longops, vistas pg_stat_progress_* de PG). Si está en espera, pase al playbook de bloqueos.
Oracle
SELECT sid, opname, sofar, totalwork, ROUND(sofar/NULLIF(totalwork,0)*100,1) pct, time_remaining FROM v$session_longops WHERE sofar<totalwork;PostgreSQL
SELECT * FROM pg_stat_progress_create_index; -- or pg_stat_progress_vacuum / _cluster / _analyze3. Decida: esperar o cancelar
Si avanza y terminará pronto, espere (el costo del rollback al cancelar puede hacer que tarde aún más). Si está atascada, se ejecuta incorrectamente o afecta a producción, termínela. Tenga en cuenta el tiempo de rollback antes de cancelar.
4. Termine si es necesario
Prefiera cancelar solo la consulta (manteniendo la sesión); si no funciona, mate la sesión.
Oracle
ALTER SYSTEM CANCEL SQL 'sid,serial#'; -- 18c+; otherwise KILL SESSIONPostgreSQL
SELECT pg_cancel_backend(pid); -- otherwise pg_terminate_backend(pid)MySQL
KILL QUERY <id>;SQL Server
KILL <session_id>;MongoDB
db.killOp(<opid>)5. Corrija de forma permanente
Optimice la consulta (índice, plan, paginación/lotes), traslade los jobs pesados a horas de baja carga y, si es necesario, ejecútelos por partes. Para informes recurrentes, considere una vista materializada / réplica de lectura.