Solução de problemas de tarefas¶
Esta seção descreve uma abordagem metódica para solucionar problemas de tarefas que não funcionam como esperado.
Neste tópico:
A tarefa não foi executada¶
Etapa 1: verificar se a tarefa não foi executada¶
Consulte a função de tabela TASK_HISTORY para verificar se a tarefa não foi executada. É possível que a tarefa tenha sido executada com sucesso, mas a instrução SQL na definição da tarefa falhou. Em particular, observe os horários de agendamento e conclusão, assim como qualquer código e mensagem de erro.
Se a tarefa tiver uma tarefa anterior (em um gráfico de tarefas), verifique se a tarefa anterior foi concluída com sucesso.
Etapa 2: verificar se a tarefa foi retomada¶
Verifique se o estado da tarefa (ou cada tarefa em um gráfico de tarefas) é RESUMED (usando DESCRIBE TASK ou SHOW TASKS).
Para retomar uma tarefa individual, execute ALTER TASK … RESUME. Para habilitar recursivamente todas as tarefas dependentes vinculadas a uma tarefa raiz, consulte a função SYSTEM$TASK_DEPENDENTS_ENABLE em vez de habilitar cada tarefa individualmente.
Enquanto você estiver revisando os detalhes da tarefa, se a tarefa tiver um cronograma, verifique também a expressão cron. Verifique se pelo menos uma ocorrência do horário agendado passou.
Etapa 3: verificar as permissões concedidas ao proprietário da tarefa¶
Verifique se o proprietário da tarefa (ou seja, a função que tem o privilégio OWNERSHIP na tarefa) tem os seguintes privilégios, que são necessários para que a tarefa seja executada:
Objeto |
Privilégio |
Notas |
---|---|---|
Conta |
EXECUTE TASK |
Requerido para executar quaisquer tarefas que a função possua. A revogação do privilégio EXECUTE TASK em uma função impede que todas as tarefas subsequentes sejam iniciadas sob essa função. |
Banco de dados |
USAGE |
|
Esquema |
USAGE |
|
Tarefa |
OWNERSHIP |
|
Warehouse |
USAGE |
Verifique os privilégios concedidos à função usando SHOW GRANTS TO ROLE role_name
.
Etapa 4: verificar a condição¶
Se a tarefa incluir uma cláusula WHEN com uma condição SYSTEM$STREAM_HAS_DATA, verifique se o fluxo especificado continha registros de captura de dados de modificação (CDC) quando a tarefa foi agendada pela última vez para ser executada. Os dados históricos de um fluxo podem ser consultados usando uma cláusula AT | BEFORE.
A tarefa expirou ou excedeu a janela do cronograma¶
Há um limite padrão de 60 minutos para uma única execução de uma tarefa. Esta limitação foi implementada como uma proteção contra tarefas não terminadas. Consulte a função de tabela TASK_HISTORY. Se a tarefa foi cancelada ou excedeu a janela programada, a causa é muitas vezes um warehouse de tamanho inferior ao previsto. Revise o tamanho do warehouse e considere aumentá-lo para caber dentro da janela programada ou do limite de uma hora.
Alternativamente, considere aumentar o tempo limite para a tarefa, executando ALTER TASK … SET USER_TASK_TIMEOUT_MS = <num>. Para determinar se o parâmetro USER_TASK_TIMEOUT_MS foi definido para uma tarefa específica, execute a seguinte instrução:
SHOW PARAMETERS LIKE 'USER_TASK_TIMEOUT_MS' IN TASK <task_name>;
Onde <task_name>
é o nome da tarefa cujo limite de tempo você está ajustando. Se a instrução não retornar nenhum registro, a tarefa atualmente tem o tempo limite padrão de 3600000
milissegundos (60 minutos).
Observe que nem aumentar o tamanho do warehouse nem aumentar o tempo limite podem ajudar se houver problemas de paralelização de consulta. Considere formas alternativas de reescrever a instrução SQL executada pela tarefa.