asynchronous_loader
最近の非同期ジョブ(例:テーブルのロード)の情報とステータスを含んでいます。このテーブルには各ジョブごとに行が含まれています。このテーブルからの情報を視覚化するツールとして utils/async_loader_graph があります。
例:
SELECT *
FROM system.asynchronous_loader
FORMAT Vertical
LIMIT 1
カラム:
job(String) - ジョブ名(ユニークでない場合があります)。job_id(UInt64) - ジョブのユニークID。dependencies(Array(UInt64)) - このジョブの前に完了する必要があるジョブのIDリスト。dependencies_left(UInt64) - 現在残っている依存関係の数。status(Enum) - ジョブの現在のロードステータス:PENDING: ロードジョブはまだ開始されていません。OK: ロードジョブは実行され、成功しました。FAILED: ロードジョブは実行され、失敗しました。CANCELED: ロードジョブは削除または依存関係の失敗により実行されません。
保留中のジョブは以下のいずれかの状態になっている可能性があります:
is_executing(UInt8) - ジョブは現在ワーカーによって実行されています。is_blocked(UInt8) - ジョブは依存関係が完了するのを待ちます。is_ready(UInt8) - ジョブは実行準備ができており、ワーカーの待機状態です。elapsed(Float64) - 実行開始から経過した秒数。ジョブが開始されていない場合はゼロ。ジョブが終了した場合は総実行時間。
各ジョブには関連するプールがあり、このプールで開始されます。各プールには一定の優先順位と可変の最大ワーカー数があります。優先順位が高い(priority 値が低い)のジョブが先に実行されます。少なくとも1つの高優先順位ジョブが準備完了または実行中である限り、低い優先順位のジョブは開始されません。ジョブの優先順位は引き上げることができますが(下げることはできません)、実行中に優先順位を高めることができます。たとえば、テーブルのロードおよびスタートアップのジョブは、受信クエリがこのテーブルを必要とする場合、優先されます。実行中にジョブを優先しても、ジョブはその execution_pool から新しく指定された pool に移動しません。ジョブは優先度の逆転を避けるために新しいジョブを作成する場合に pool を使用します。既に開始されたジョブは、高優先順位のジョブによって中断されず、開始後は常に完了まで実行されます。
pool_id(UInt64) - 現在ジョブに割り当てられているプールのID。pool(String) -pool_idプールの名前。priority(Int64) -pool_idプールの優先順位。execution_pool_id(UInt64) - ジョブが実行されるプールのID。実行開始前の初めに割り当てられたプールと一致します。execution_pool(String) -execution_pool_idプールの名前。execution_priority(Int64) -execution_pool_idプールの優先順位。ready_seqno(Nullable(UInt64)) - 準備完了状態のジョブに対して null ではありません。ワーカーはそのプールの準備キューから次のジョブを実行のために取得します。準備完了ジョブが複数ある場合は、ready_seqnoの値が最も低いジョブが選ばれます。waiters(UInt64) - このジョブを待機しているスレッドの数。exception(Nullable(String)) - 失敗およびキャンセルされたジョブに対して null ではありません。クエリ実行中に発生したエラーメッセージや、このジョブの依存関係失敗チェーンと共にキャンセルを引き起こしたエラーを保持します。
ジョブのライフタイム中の時間インスタンス:
schedule_time(DateTime64) - ジョブが作成され、実行するためにスケジュールされた時間(通常すべての依存関係と共に)。enqueue_time(Nullable(DateTime64)) - ジョブが準備完了となり、そのプールの準備キューに入れられた時間。ジョブが未準備の場合は null。start_time(Nullable(DateTime64)) - ワーカーが準備キューからジョブをデキューし、実行を開始した時間。ジョブが開始されていない場合は null。finish_time(Nullable(DateTime64)) - ジョブの実行が終了した時間。ジョブが終了していない場合は null。