Cancelación de una consulta
Si ejecuta una consulta que tarda mucho tiempo o que consume demasiados recursos, cancélela. Por ejemplo, cree una lista de vendedores de tickets que incluya el nombre del vendedor y la cantidad de tickets que vendió. La siguiente consulta selecciona los datos de la tabla SALES
y de la tabla USERS
y une las dos tablas haciendo coincidir los parámetros SELLERID y USERID en la cláusula WHERE.
SELECT sellerid, firstname, lastname, sum(qtysold) FROM sales, users WHERE sales.sellerid = users.userid GROUP BY sellerid, firstname, lastname ORDER BY 4 desc;
El resultado es similar al siguiente:
sellerid | firstname | lastname | sum
----------+-----------+----------+------
48950 | Nayda | Hood | 184
19123 | Scott | Simmons | 164
20029 | Drew | Mcguire | 164
36791 | Emerson | Delacruz | 160
13567 | Imani | Adams | 156
9697 | Dorian | Ray | 156
41579 | Harrison | Durham | 156
15591 | Phyllis | Clay | 152
3008 | Lucas | Stanley | 148
44956 | Rachel |Villarreal| 148
nota
Se trata de una consulta compleja. Para este tutorial, no necesita preocuparse por cómo se construye esta consulta.
La consulta anterior se ejecuta en segundos y devuelve 2102 filas.
Suponga que se olvida de incorporar la cláusula WHERE.
SELECT sellerid, firstname, lastname, sum(qtysold) FROM sales, users GROUP BY sellerid, firstname, lastname ORDER BY 4 desc;
El conjunto de resultados incluye todas las filas de la tabla SALES
multiplicadas por todas las filas de la tabla USERS
(49 989 x 3766). Esta es una unión cartesiana, la que no se recomienda. El resultado es de más de 188 millones de filas y toma mucho tiempo de ejecución.
Para cancelar una consulta en ejecución, utilice el comando CANCEL con el ID de sesión de la consulta. Con el editor de consultas de Amazon Redshift v2, puede cancelar una consulta pulsando el botón Cancelar mientras la consulta está en ejecución.
Para encontrar el ID de sesión, comience una nueva sesión y consulte la tabla STV_RECENTS, tal como se muestra en el paso anterior. En el siguiente ejemplo, se muestra cómo puede hacer que los resultados sean más fáciles de leer. Para ello, utilice la función TRIM para eliminar espacios finales y mostrar solo los primero 20 caracteres de la cadena de consulta.
Para determinar el ID de sesión de una consulta en ejecución, ejecute la siguiente instrucción SELECT.
SELECT user_id, session_id, start_time, query_text FROM sys_query_history WHERE status='running';
El resultado es similar al siguiente:
user_id | session_id | start_time | query_text
---------+---------------+----------------------------+----------------------------------------------------------------
100 | 1073791534 | 2024-03-19 22:26:21.205739 | SELECT user_id, session_id, start_time, query_text FROM ...
Para cancelar la consulta con el ID de sesión 1073791534
, ejecute el siguiente comando.
CANCEL 1073791534;
nota
El comando CANCEL no detiene una transacción. Para detener o revertir una transacción, debe utilizar el comando ABORT o ROLLBACK. Para cancelar una consulta asociada a una transacción, primero cancele la consulta y, luego, detenga la transacción.
Si la consulta que canceló está asociada con una transacción, utilice el comando ABORT o ROLLBACK para cancelar la transacción y descartar los cambios realizados en los datos:
ABORT;
A menos que haya iniciado una sesión de superusuario, solo puede cancelar sus propias consultas. Un superusuario puede cancelar todas las consultas.
Si su herramienta de consulta no admite la ejecución de consultas de manera simultánea, inicie otra sesión para cancelar la consulta.
Para obtener más información acerca de la cancelación de una consulta, consulte CANCEL en la Guía para desarrolladores de bases de datos de Amazon Redshift.
Cancelación de una consulta mediante la cola de superusuario
Si su sesión actual tiene demasiadas consultas ejecutándose de forma simultánea, es posible que no pueda ejecutar el comando CANCEL hasta que termine otra consulta. En ese caso, ejecute el comando CANCEL con una cola de consulta de administración de cargas de trabajo diferente.
Al usar la administración de cargas de trabajo, puede ejecutar consultas en diferentes colas de consulta para no tener que esperar que se complete otra consulta. El administrador de cargas de trabajo crea una cola independiente, denominada cola de superusuario, que puede utilizar para solucionar problemas. Para utilizar la cola de superusuario, inicie una sesión de superusuario y configure el grupo de consultas como “superusuario” con el comando SET. Después de ejecutar los comandos, restablezca el grupo de consultas con el comando RESET.
Para cancelar una consulta mediante la cola de superusuario, ejecute estos comandos.
SET query_group TO 'superuser'; CANCEL 1073791534; RESET query_group;