トラブルシューティングタスク

このセクションでは、期待どおりに実行されないタスクをトラブルシューティングするための体系的なアプローチについて説明します。

このトピックの内容:

タスクが実行されなかった

ステップ1:タスクが実行されなかったことを確認する

TASK_HISTORY テーブル関数をクエリして、タスクが実行されなかったことを確認します。タスクは正常に実行されたが、タスク定義の SQL ステートメントが失敗した可能性もあります。特に、スケジュールされた時間と完了した時間、およびエラーコードとメッセージに注意してください。

タスクに親タスクがある場合(タスクのツリー内)、親タスクが正常に完了したかどうかを確認します。

ステップ2:タスクが再開されたことを確認する

タスク(またはタスクツリー内の各タスク)の状態が RESUMED であることを確認します( DESCRIBE TASK または SHOW TASKS を使用)。

個々のタスクを再開するには、 ALTER TASK ... RESUME を実行します。ルートタスクに関連付けられたすべての依存タスクを再帰的に有効にするには、各タスクを個別に有効にするのではなく、 SYSTEM$TASK_DEPENDENTS_ENABLE 関数をクエリします。

タスクの詳細を確認しているときに、タスクにスケジュールがある場合は、cron式も確認してください。スケジュールされた時間の少なくとも1つが経過したことを確認します。

ステップ3:タスク所有者に付与された権限を確認する

タスクの所有者(つまり、タスクに対する OWNERSHIP 権限を持つロール)がグローバル EXECUTE TASK 権限を持っていることを確認します( SHOW GRANTS TO ROLE ロール名 を使用)。この権限は、タスクを実行するために必要です。

ロールに EXECUTE TASK 権限がない場合は、アカウント管理者( ACCOUNTADMIN ロールを持つユーザー)として権限を割り当てます。例:

USE ROLE accountadmin;

GRANT EXECUTE TASK ON ACCOUNT TO ROLE <role_name>;

ステップ4:状態を確認する

タスクに SYSTEM$STREAM_HAS_DATA 条件の WHEN 句が含まれる場合は、指定されたストリームに、タスクの実行が最後にスケジュールされたときに変更データキャプチャ(CDC)レコードが含まれていることを確認します。ストリームの履歴データは、 AT | BEFORE 句を使用してクエリできます。

タスクがタイムアウトしたか、スケジュールウィンドウを超過した

タスクの1回の実行には、60分のデフォルトの制限があります。この制限は、終了しないタスクに対する保護手段として実装されました。 TASK_HISTORY テーブル関数をクエリします。タスクがキャンセルされたか、タスクにスケジュールされたウィンドウを超えた場合、原因のほとんどはウェアハウスが小さすぎることです。ウェアハウスのサイズを確認して、スケジュールウィンドウまたは1時間の制限内に収まるようにサイズを増やすことを検討します。

または、 ALTER TASK ... SET USER_TASK_TIMEOUT_MS = <数> を実行して、タスクのタイムアウトの制限を増やすことを検討します。

クエリの並列化の問題がある場合は、ウェアハウスのサイズを増やしても解決しない場合があります。タスクによって実行される SQL ステートメントを書き換える別の方法を検討してください。