Tarefa 7: Cancelar uma consulta - Amazon Redshift

Tarefa 7: Cancelar uma consulta

Se você executar uma consulta que está demorando muito ou consumindo recursos do cluster excessivos, cancele a consulta. 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 PID da consulta.

Para localizar o ID do processo, 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.

SELECT pid, trim(user_name), starttime, substring(query,1,20) FROM stv_recents WHERE status='Running';

O resultado é parecido com o mostrado a seguir.

pid | btrim | starttime | substring -------+------------+----------------------------+---------------------- 610 | adminuser | 2013-03-28 18:39:49.355918 | select sellerid, fir (1 row)

Para cancelar a consulta com PID 18764, execute o seguinte comando.

CANCEL 610;
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.

Cancelar uma consulta de outra sessão

Se sua ferramenta de consulta não oferece suporte à execução de consultas simultaneamente, inicie outra sessão para cancelar a consulta. Por exemplo, o editor de consulta que usamos no Guia de conceitos básicos do Amazon Redshift não é compatível com várias consultas simultâneas. Para iniciar outra sessão com o editor de consulta, escolha Arquivo, Nova janela e conecte-se usando os mesmos parâmetros de conexão. Em seguida, você pode encontrar o PID e cancelar a consulta.

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 Superusuário, execute estes comandos.

SET query_group TO 'superuser'; CANCEL 610; RESET query_group;