Cancelar uma consulta - Amazon Redshift

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;