Cancelar uma consulta
Se você executar uma consulta que esteja demorando muito ou consumindo uma quantidade excessiva de recursos, cancele-a. Por exemplo, crie uma lista de vendedores de ingressos que inclua o nome do vendedor e a quantidade de ingressos vendidos. A consulta a seguir seleciona dados da tabela SALES
e da tabela USERS
e une as duas tabelas, correspondendo SELLERID e USERID na 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;
O resultado é parecido com o mostrado a seguir.
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
Essa é uma consulta complexa. Para este tutorial, não se preocupe em saber como a consulta foi criada.
A consulta anterior é executada em segundos e retornará 2.102 linhas.
Suponha que você se esqueça de inserir a cláusula WHERE.
SELECT sellerid, firstname, lastname, sum(qtysold) FROM sales, users GROUP BY sellerid, firstname, lastname ORDER BY 4 desc;
O conjunto de resultados inclui todas as linhas da tabela SALES
multiplicadas por todas as linhas da tabela USERS
(49989*3766). Isso é chamado de junção cartesiana, e não é uma prática recomendada. O resultado é mais de 188 milhões linhas e o tempo de execução é bastante longo.
Para cancelar uma consulta em execução, use o comando CANCEL com o ID da sessão da consulta. Com o Editor de Consultas do Amazon Redshift v2, é possível cancelar uma consulta escolhendo o botão Cancelar enquanto a consulta está em execução.
Para localizar o ID da sessão, inicie uma nova sessão e consulte a tabela STV_RECENTS, conforme mostrado na etapa anterior. O exemplo a seguir mostra como você pode fazer os resultados mais legíveis. Para fazer isso, use a função TRIM para cortar os espaços à direita e mostrar somente os 20 primeiros caracteres da consulta.
Para determinar o ID da sessão de uma consulta em execução, execute a declaração SELECT a seguir.
SELECT user_id, session_id, start_time, query_text FROM sys_query_history WHERE status='running';
O resultado é parecido com o mostrado a seguir.
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 a consulta com o ID de sessão 1073791534
, execute o comando a seguir.
CANCEL 1073791534;
nota
O comando CANCEL não interrompe uma transação. Para parar ou reverter uma transação, use o comando ABORT ou ROLLBACK. Para cancelar uma consulta associada a uma transação, primeiro cancele a consulta e pare a transação.
Se a consulta que você cancelou estiver associada a uma transação, use o comando ABORT ou ROLLBACK para cancelar a transação e descartar quaisquer alterações feitas nos dados:
ABORT;
A menos que esteja conectado como um superusuário, você só pode cancelar suas próprias consultas. Os superusuários podem cancelar todas as consultas.
Se sua ferramenta de consulta não oferece suporte à execução de consultas simultaneamente, inicie outra sessão para cancelar a consulta.
Para ter mais informações sobre cancelamento de uma consulta, confira CANCEL no Guia do desenvolvedor de banco de dados do Amazon Redshift.
Cancelar uma consulta usando a fila de superusuários
Se a sua sessão atual tiver muitas consultas sendo executadas simultaneamente, talvez não seja possível executar o comando CANCEL até que uma outra consulta seja concluída. Nesse caso, execute o comando CANCEL usando uma fila de consulta de gerenciamento de workload diferente.
Usando o gerenciamento de workload, você pode executar consultas em diferentes filas de consulta para que não precise esperar a conclusão de outra consulta. O gerenciador de workload cria uma fila separada, chamada a fila de superusuários, que você pode usar quando estiver solucionando problemas. Para usar a fila Superusuário, faça logon em um superusuário e defina o grupo de consulta como “superusuário” usando o comando SET. Depois de executar os comandos, redefina o grupo de consultas usando o comando RESET.
Para cancelar uma consulta usando a fila de superusuários, execute estes comandos:
SET query_group TO 'superuser'; CANCEL 1073791534; RESET query_group;