Por que minha consulta foi cancelada no Amazon Redshift?

7 minuto de leitura
0

Minha consulta no Amazon Redshift foi cancelada com uma mensagem de erro.

Descrição breve

Uma consulta pode ser cancelada no Amazon Redshift pelos seguintes motivos:

  • Configuração de regras de monitoramento de consultas de gerenciamento de workloads (WLM) do Amazon Redshift
  • Valor do tempo limite da instrução
  • Solicitações ABORT, CANCEL ou TERMINATE
  • Problemas de rede
  • Atualizações de manutenção de cluster
  • Erros de processamento interno
  • Erros ASSERT

Para evitar que sua consulta seja interrompida, conclua as seguintes etapas:

Resolução

Configuração das regras de monitoramento de consultas do WLM do Amazon Redshift

Crie regras de monitoramento de consultas (QMRs) de WLM para definir limites de performance baseados em métricas para suas filas. Ou especifique as ações que o Amazon Redshift executa quando uma consulta excede os limites de tempo de WLM. Por exemplo, crie uma regra que cancele consultas executadas por mais de 60 segundos.

Exemplo 1: Ação de anulação especificada na regra de monitoramento de consultas

Se uma consulta for cancelada devido à ação de anulação especificada em uma regra de monitoramento de consulta, a consulta retornará o seguinte erro:

"ERROR: Query (500029) cancelled by WLM abort action of Query Monitoring Rule "testrule"."

Para identificar se uma consulta foi cancelada devido a uma ação de “anulação”, execute a seguinte consulta:

select * from STL_WLM_RULE_ACTION where action = 'abort';

A saída da consulta lista todas as consultas canceladas pela ação de “anulação”. Se a sua ID de consulta estiver listada na saída, aumente o limite de tempo no parâmetro QMR para WLM.

Exemplo 2: Não há filas disponíveis para o salto da consulta

Uma consulta poderá ser saltada se a ação de “salto” for especificada na regra de monitoramento da consulta. Quando uma consulta é saltada, o WLM tenta roteá-la para a próxima fila correspondente com base nas regras de atribuição de filas do WLM. Se a consulta não corresponder à definição de fila, ela será cancelada. Uma consulta cancelada não é reatribuída à fila padrão. Para mais informações, consulte Properties for the wlm_json_configuration parameter (Propriedades do parâmetro wlm_json_configuration).

**Observação:**você pode saltar consultas somente em uma configuração manual de WLM.

Se uma consulta for interrompida, mas nenhuma fila correspondente estiver disponível, a consulta cancelada retornará a seguinte mensagem de erro:

"ERROR: Query (500104) canceled on user's request and ran out of wlm queues for restart."

Se a sua consulta for cancelada com essa mensagem de erro, execute a seguinte consulta para verificar as filas definidas pelo usuário:

select * from stl_wlm_query where query=<query-id>;

Em sua saída, as entradas 6-13 service_class incluem as filas definidas pelo usuário. Por exemplo, service_class 6 pode listar Queue1 na configuração de WLM e service_class 7 pode listar Queue2.

Execute a consulta a seguir para obter mais informações sobre service_class para o mapeamento de fila:

select * from stv_wlm_service_class_config where service_class>5;

Depois de obter as informações de mapeamento da fila, verifique a configuração de WLM no console do Amazon Redshift. Verifique se as filas correspondem à configuração de WLM. Você só poderá pular uma consulta se houver uma fila correspondente disponível para a configuração do grupo de usuários ou do grupo de consultas. Para mais informações, consulte WLM query queue hopping (Salto na fila de consultas do WLM).

Valor do tempo limite da instrução

O valor de statement_timeout é o tempo máximo em que uma consulta é executada antes que o Amazon Redshift a encerre. Quando o tempo limite de uma declaração é excedido, as consultas enviadas durante a sessão são canceladas com a seguinte mensagem de erro:

“ERRO: Consulta (150) cancelada a pedido do usuário”

Para verificar se uma consulta foi cancelada devido ao tempo limite de uma instrução, execute a seguinte consulta:

select * from SVL_STATEMENTTEXT where text ilike '%set%statement_timeout%to%' and pid in (select pid from STL_QUERY where query = <queryid>);

Tempos limite de instrução também podem ser definidos no grupo de parâmetros do cluster. Verifique seu grupo de parâmetros de cluster e qualquer configuração de statement_timeout para confirmação adicional. Para mais informações, consulte Modifying a parameter group (Modificar um grupo de parâmetros).

Solicitações ABORT, CANCEL ou TERMINATE

Para verificar se uma consulta específica foi interrompida ou cancelada por um usuário (como um superusuário), execute a consulta a seguir com seu ID de consulta:

select * from SVL_STATEMENTTEXT where text ilike '%cancel%' and xid
    in (select xid from STL_QUERY where query = <queryid>);
select * from SVL_STATEMENTTEXT where text ilike '%abort%' and xid in (select xid from STL_QUERY where query = <queryid>);

Se a consulta aparecer na saída, significa que ela foi interrompida ou cancelada mediante solicitação do usuário.

Observação: os usuários podem encerrar somente suas próprias sessões. Um superusuário pode encerrar todas as sessões.

Consultas também podem ser interrompidas quando um usuário cancela ou encerra um processo correspondente (no qual a consulta está sendo executada). Veja a seguir exemplos de processos que podem cancelar ou encerrar uma consulta:

Quando um processo é cancelado ou encerrado por esses comandos, uma entrada é registrada em SVL_TERMINATE. Para confirmar se uma consulta foi interrompida porque uma sessão foi encerrada, verifique os logs SVL_TERMINATE. Execute a consulta a seguir para verificar os logs SVL_TERMINATE:

select * from SVL_TERMINATE where pid=(select pid from STL_QUERY where query=500534);

Problemas de rede

Às vezes, consultas são canceladas devido a problemas de rede subjacentes. Para verificar se problemas de rede estão fazendo com que sua consulta seja cancelada, execute a seguinte consulta para verificar as entradas STL_CONNECTION_LOG:

select * from STL_CONNECTION_LOG where pid in (select pid from STL_QUERY where query = <query_id>);

O STL_CONNECTION_LOG registra tentativas de autenticação e conexões ou desconexões de rede. Se a sua consulta aparecer na saída, um problema de conexão de rede pode estar fazendo com que ela seja cancelada.

Atualizações de manutenção de cluster

Se uma manutenção programada ocorrer quando uma consulta estiver em execução, esta será encerrada e revertida, exigindo a reinicialização do cluster. Programe operações de longa duração (como grandes cargas de dados ou a operação VACUUM) para evitar janelas de manutenção. Para mais informações, consulte Schedule around maintenance windows (Programar em torno de janelas de manutenção).

Para verificar se a manutenção foi realizada no seu cluster do Amazon Redshift, escolha a guia Eventos no console do Amazon Redshift.

Erros de processamento interno

A tabela STL_ERROR registra erros de processamento interno gerados pelo Amazon Redshift. A tabela STL_ERROR não registra erros ou mensagens SQL.

Para verificar se a sua consulta foi cancelada por um erro interno, execute a seguinte consulta para verificar as entradas STL_ERROR:

select * from STL_ERROR where userid=<user id>;

Erros ASSERT

Às vezes, as consultas são interrompidas devido a um erro ASSERT. O erro ASSERT pode ocorrer quando há um problema com a consulta propriamente dita. Se você receber um erro ASSERT após um upgrade de patch, atualize o Amazon Redshift para a versão mais recente do cluster. Em seguida, verifique o histórico de versões do cluster. Ou, você pode reverter a versão do cluster.

AWS OFICIAL
AWS OFICIALAtualizada há 10 meses