asynchronous_loader 시스템 테이블

asynchronous_loader 시스템 테이블

asynchronous_loader 시스템 테이블은 최근 비동기 작업(예: 테이블 로딩용)에 대한 정보와 상태를 담고 있어요. 각 작업에 대해 하나의 행을 포함해요. 이 테이블의 정보를 시각화하는 도구로 utils/async_loader_graph가 있어요.

출처: 문서

본문

Querying in ClickHouse Cloud 이 시스템 테이블의 데이터는 ClickHouse Cloud의 각 노드에 로컬로 보관돼요. 따라서 모든 데이터에 대한 완전한 뷰를 얻으려면 clusterAllReplicas 함수가 필요해요. 자세한 내용은 여기를 참고해요.

Description (설명)

최근 비동기 작업(예: 테이블 로딩용)에 대한 정보와 상태를 담고 있어요. 각 작업에 대해 하나의 행을 포함해요. 이 테이블의 정보를 시각화하는 도구 utils/async_loader_graph가 있어요.

Columns (열)

  • job (String) — 작업 이름(고유하지 않을 수 있음).
  • job_id (UInt64) — 작업의 고유 ID.
  • dependencies (Array(UInt64)) — 이 작업 전에 완료되어야 하는 작업의 ID 목록.
  • dependencies_left (UInt64) — 완료해야 할 남은 의존성 수.
  • status (Enum8(‘PENDING’ = 0, ‘OK’ = 1, ‘FAILED’ = 2, ‘CANCELED’ = 3)) — 작업의 현재 로드 상태: PENDING: 로드 작업이 아직 시작되지 않음. OK: 로드 작업이 실행되어 성공. FAILED: 로드 작업이 실행되어 실패. CANCELED: 로드 작업이 제거 또는 의존성 실패로 실행되지 않을 예정.
  • is_executing (UInt8) — 작업이 현재 worker에 의해 실행 중.
  • is_blocked (UInt8) — 작업이 의존성 완료를 기다리고 있음.
  • is_ready (UInt8) — 작업이 실행 준비가 되어 worker를 기다리고 있음.
  • elapsed (Float64) — 실행 시작 이후 경과한 초. 작업이 시작되지 않았으면 0. 작업이 끝났으면 총 실행 시간.
  • 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이 아님. worker는 풀의 준비 큐에서 다음으로 실행할 작업을 가져와요. 준비된 작업이 여러 개 있으면 ready_seqno 값이 가장 낮은 작업이 선택돼요.
  • waiters (UInt64) — 이 작업을 기다리는 스레드 수.
  • exception (Nullable(String)) — 실패 및 취소된 작업에 대해 null이 아님. 쿼리 실행 중 발생한 오류 메시지나 이 작업을 취소하게 한 오류를 의존성 실패 체인과 함께 보관해요.
  • schedule_time (DateTime64(6)) — 작업이 생성되고 실행하도록 예약된 시간(보통 모든 의존성과 함께).
  • enqueue_time (Nullable(DateTime64(6))) — 작업이 준비가 되어 풀의 준비 큐에 들어간 시간. 작업이 아직 준비되지 않았으면 null.
  • start_time (Nullable(DateTime64(6))) — worker가 준비 큐에서 작업을 디큐하고 실행을 시작한 시간. 작업이 아직 시작되지 않았으면 null.
  • finish_time (Nullable(DateTime64(6))) — 작업 실행이 끝난 시간. 작업이 아직 끝나지 않았으면 null.

대기 중(pending) 작업은 다음 상태 중 하나일 수 있어요.

  • is_executing (UInt8) - 작업이 현재 worker에 의해 실행 중.
  • is_blocked (UInt8) - 작업이 의존성 완료를 기다리고 있음.
  • is_ready (UInt8) - 작업이 실행 준비가 되어 worker를 기다리고 있음.
  • elapsed (Float64) - 실행 시작 이후 경과한 초. 작업이 시작되지 않았으면 0. 작업이 끝났으면 총 실행 시간.

모든 작업에는 연관된 풀이 있으며 이 풀에서 시작돼요. 각 풀은 상수 우선순위와 변경 가능한 최대 worker 수를 가져요. 더 높은 우선순위(낮은 priority 값)의 작업이 먼저 실행돼요. 준비되거나 실행 중인 더 높은 우선순위 작업이 하나라도 있는 동안에는 더 낮은 우선순위 작업이 시작되지 않아요. 작업 우선순위는 우선순위를 부여함으로써 상향(그러나 하향은 안 됨)될 수 있어요. 예를 들어 테이블 로딩 및 시작을 위한 작업은 들어오는 쿼리가 해당 테이블을 요구하면 우선순위가 부여돼요. 실행 중에 작업에 우선순위를 부여하는 것도 가능하지만, 작업은 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이 아님. worker는 풀의 준비 큐에서 다음으로 실행할 작업을 가져와요. 준비된 작업이 여러 개 있으면 ready_seqno 값이 가장 낮은 작업이 선택돼요.
  • waiters ( UInt64 ) - 이 작업을 기다리는 스레드 수.
  • exception ( Nullable(String) ) - 실패 및 취소된 작업에 대해 null이 아님. 쿼리 실행 중 발생한 오류 메시지나 이 작업을 취소하게 한 오류를 의존성 실패 체인과 함께 보관해요.

작업 수명 중의 시간 지점:

  • schedule_time (DateTime64) - 작업이 생성되고 실행하도록 예약된 시간(보통 모든 의존성과 함께).
  • enqueue_time (Nullable(DateTime64)) - 작업이 준비가 되어 풀의 준비 큐에 들어간 시간. 작업이 아직 준비되지 않았으면 null.
  • start_time (Nullable(DateTime64)) - worker가 준비 큐에서 작업을 디큐하고 실행을 시작한 시간. 작업이 아직 시작되지 않았으면 null.
  • finish_time (Nullable(DateTime64)) - 작업 실행이 끝난 시간. 작업이 아직 끝나지 않았으면 null.

Example (예제)

SELECT *
FROM system.asynchronous_loader
LIMIT 1
FORMAT Vertical