🧚 ¡Escucha! Beekeeper Studio es una GUI de bases de datos rápida, moderna y de código abierto Descarga
15 de julio de 2024 Por Matthew Rathbone

Cómo matar una consulta

Antes de matar una consulta, necesitas identificar cuáles están causando problemas. Usa el siguiente SQL para listar todas las consultas en ejecución junto con su duración:

SELECT
    pid,
    user_name,
    starttime,
    query,
    elapsed
FROM
    stv_recents
WHERE
    state = 'Running'
ORDER BY
    elapsed DESC;

Resultado esperado:

pid user_name starttime query elapsed
123 admin 2023-10-01 10:00:00 SELECT * FROM ? 01:20:15
456 analyst 2023-10-01 10:45:00 UPDATE table ? 00:35:10
… … … … …

La columna elapsed muestra cuánto tiempo lleva ejecutándose la consulta.

Una vez que identifiques la consulta problemática (usando el pid de la lista anterior), puedes terminarla. Usa el siguiente comando:

CANCEL pid;

Ejemplo:

CANCEL 123;

Cómo verificar que la consulta se terminó

Para asegurarte de que la consulta se terminó, vuelve a ejecutar la consulta inicial:

SELECT
    pid,
    user_name,
    starttime,
    query,
    elapsed
FROM
    stv_recents
WHERE
    state = 'Running'
ORDER BY
    elapsed DESC;

La consulta terminada ya no debería aparecer en los resultados.

Cómo manejar consultas bloqueadas

A veces, las consultas se bloquean y hay que matarlas para liberar recursos. Puedes identificar las consultas bloqueadas con la tabla STV_BLOCKED.

SELECT
    b.pid,
    b.user_name,
    b.db,
    b.query,
    l.pid AS blocked_by_pid,
    l.user_name AS blocked_by_user
FROM
    stv_blocked b
JOIN
    stv_locks l
ON
    b.lock_owner_pid = l.pid;

Resultado esperado:

pid user_name db query blocked_by_pid blocked_by_user
5678 analytics reporting SELECT count(*) FROM ?; 9101 Admin

Para matar una consulta bloqueada, usa el comando CANCEL como se mostró antes:

CANCEL 5678;

Cómo automatizar la terminación de consultas

En bases de datos con requisitos de rendimiento estrictos, automatizar la detección y terminación de consultas de larga duración puede ser muy útil. A continuación tienes un ejemplo de procedimiento para terminar consultas que se ejecutan por más tiempo que un umbral específico:

DO $$ 
DECLARE
    long_running_query RECORD;
BEGIN
    FOR long_running_query IN
        SELECT pid
        FROM stv_recents
        WHERE state = 'Running'
        AND elapsed > interval '00:30:00' -- Replace with desired threshold
    LOOP
        EXECUTE 'CANCEL ' || long_running_query.pid;
    END LOOP;
END;
$$;

Consideraciones importantes

  • Permisos: Solo los usuarios con los permisos adecuados pueden cancelar consultas.
  • Impacto: Terminar una consulta puede afectar el rendimiento de la aplicación o causar inconsistencias en los datos si no se hace correctamente.
  • Monitoreo: Monitorear con regularidad el rendimiento de las consultas ayuda a detectar problemas a tiempo.

Conclusión

Gestionar bien las consultas de larga duración te ayuda a garantizar un rendimiento óptimo de tu clúster de Amazon Redshift. Siguiendo estos pasos, puedes identificar y terminar rápidamente cualquier consulta problemática. Implementar soluciones automatizadas para el monitoreo regular y la terminación de consultas te puede ayudar aún más a mantener el rendimiento.

Asegúrate de probar todos los comandos y scripts en un entorno que no sea de producción antes de desplegarlos en producción, para evitar interrupciones no deseadas.

Otras publicaciones que te pueden gustar:

Beekeeper Studio es un cliente de bases de datos gratuito y de código abierto

La mejor herramienta de consultas y edición de SQL que he usado. Tiene todo lo que necesito para administrar mi base de datos. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio es rápido, intuitivo y fácil de usar. Es compatible con muchísimas bases de datos y funciona de maravilla en Windows, Mac y Linux.

La versión de Beekeeper para Linux tiene el 100% de las funciones, sin recortes ni concesiones.

Lo que dicen los usuarios de Beekeeper Studio

★★★★★
"Beekeeper Studio reemplazó por completo mi antiguo flujo de trabajo con SQL. Es rápido, intuitivo y hace que trabajar con bases de datos vuelva a ser agradable."
— Alex K., desarrollador de bases de datos
★★★★★
"He probado muchas GUI de bases de datos, pero Beekeeper logra el equilibrio perfecto entre funciones y simplicidad. Simplemente funciona."
— Sarah M., ingeniera full stack

¿Listo para mejorar tu flujo de trabajo con SQL?

download Descarga gratis