태스크 속성

태스크 속성 (Task properties)

Trino 태스크의 동시성·스레드·메모리 사용을 제어하는 속성들이에요.

출처: 문서

본문

task.concurrency

  • 타입: integer
  • 제약: 2의 거듭제곱이어야 함
  • 기본값: 노드의 물리 CPU 수 (최솟값 2, 최댓값 32). 장애 허용 실행 모드에서는 8이 기본.
  • 세션 속성: task_concurrency

조인, 집계 같은 병렬 연산자의 기본 로컬 동시성이에요. 이 값은 쿼리 동시성과 워커 리소스 활용에 따라 위·아래로 조정해야 해요. 많은 쿼리를 동시에 실행하는 클러스터에는 낮은 값이 더 좋아요. 이미 실행 중인 모든 쿼리가 클러스터를 활용하므로 동시성을 더 늘리면 컨텍스트 스위칭과 기타 오버헤드로 느려지기 때문이죠. 한 번에 쿼리 하나나 몇 개만 실행하는 클러스터는 높은 값이 더 좋아요.

task.http-response-threads

  • 타입: integer
  • 최솟값: 1
  • 기본값: 100

HTTP 응답을 처리하기 위해 생성될 수 있는 최대 스레드 수예요. 스레드는 필요할 때 만들어지고 유휴 상태가 되면 정리되므로, 처리할 요청 수가 적으면 큰 값에도 오버헤드가 없어요. 높은 값은 동시 쿼리가 많거나 수백·수천 개의 워커가 있는 클러스터에서 도움이 될 수 있어요.

task.http-timeout-threads

  • 타입: integer
  • 최솟값: 1
  • 기본값: 3

HTTP 응답을 생성할 때 타임아웃을 처리하는 스레드 수예요. 모든 스레드가 자주 사용 중이면 이 값을 늘려야 해요. 이것은 trino.server:name=AsyncHttpExecutionMBean:TimeoutExecutor JMX 객체로 모니터링할 수 있어요. ActiveCount가 항상 PoolSize와 같다면 스레드 수를 늘리세요.

task.info-update-interval

  • 타입: duration
  • 최솟값: 1ms
  • 최댓값: 10s
  • 기본값: 3s

스케줄링에 사용되는 태스크 정보의 낡은 정도(staleness)를 제어해요. 값이 크면 코디네이터 CPU 부하를 줄일 수 있지만 스플릿 스케줄링이 최적이 아닐 수 있어요.

task.max-drivers-per-task

  • 타입: integer
  • 최솟값: 1
  • 기본값: 2147483647

태스크가 동시에 실행하는 최대 드라이버 수를 제어해요. 이 값을 설정하면 태스크가 너무 많은 드라이버를 사용할 가능성이 줄어 동시 쿼리 성능이 개선될 수 있어요. 동시 쿼리를 너무 적게 실행하면 리소스가 낭비될 수 있어요.

task.max-partial-aggregation-memory

분산 집계의 부분 집계 결과의 최대 크기예요. 이 값을 늘리면 각 그룹을 플러시하기 전에 더 많이 로컬에 유지할 수 있어 네트워크 전송을 줄이고 CPU 사용을 낮출 수 있는 대신, 추가 메모리를 사용해요.

task.max-worker-threads

  • 타입: integer
  • 기본값: (노드 CPU * 2)

워커가 스플릿을 처리하는 데 사용하는 스레드 수를 설정해요. 워커 CPU 사용이 낮고 모든 스레드가 사용 중일 때 이 수를 늘리면 처리량이 개선될 수 있지만 힙 공간 사용이 늘어요. 너무 높게 설정하면 컨텍스트 스위칭으로 성능이 떨어질 수 있어요. 활성 스레드 수는 trino.execution.executor:name=TaskExecutor.RunningSplits JMX 객체의 RunningSplits 속성으로 확인할 수 있어요.

task.min-drivers

  • 타입: integer
  • 기본값: (task.max-worker-threads * 2)

워커에서 실행 중인 리프(leaf) 스플릿의 목표 수예요. 각 리프 태스크에 최소 3개의 실행 스플릿이 보장되므로 이 값은 최솟값이에요. 논리프(non-leaf) 태스크도 데드락을 막기 위해 실행이 보장돼요. 값이 낮으면 새 태스크의 응답성이 좋아질 수 있지만 리소스가 덜 활용될 수 있어요. 값이 높으면 리소스 활용이 늘지만 추가 메모리를 사용해요.

task.min-drivers-per-task

  • 타입: integer
  • 최솟값: 1
  • 기본값: 3

태스크가 처리할 남은 스플릿이 있을 때 단일 태스크에 대해 동시 실행이 보장되는 최소 드라이버 수예요.

task.scale-writers.enabled

상세 내용은 task.scale-writers.enabled를 참고하세요.

task.min-writer-count

  • 타입: integer
  • 기본값: 1
  • 세션 속성: task_min_writer_count

선호 파티셔닝(preferred partitioning)태스크 라이터 스케일링을 사용하지 않을 때 쿼리당 워커당 동시 라이터 스레드 수예요. 이 값을 늘리면 쓰기 속도가 빨라질 수 있는데, 특히 쿼리가 I/O 바운드가 아니고 병렬 쓰기를 위해 추가 CPU를 활용할 수 있을 때요.

일부 커넥터는 압축이나 다른 요인 때문에 쓰기 시 CPU에서 병목이 될 수 있어요. 너무 높게 설정하면 과도한 리소스 활용으로 클러스터가 과부하될 수 있어요. 특히 엔진이 선호 파티셔닝 없이 파티셔닝된 테이블에 삽입할 때 그래요. 그런 경우 각 라이터 스레드가 모든 파티션에 쓸 수 있어요. 파티션에 쓰면 버퍼링을 위해 일정 메모리가 할당되므로 메모리 부족 오류가 날 수 있어요.

task.max-writer-count

  • 타입: integer
  • 제약: 2의 거듭제곱이어야 함
  • 기본값: 노드의 물리 CPU 수 (최솟값 2, 최댓값 64)
  • 세션 속성: task_max_writer_count

태스크 라이터 스케일링 또는 선호 파티셔닝을 사용할 때 쿼리당 워커당 동시 라이터 스레드 수예요. 이 값을 늘리면 쓰기 속도가 빨라질 수 있는데, 특히 쿼리가 I/O 바운드가 아니고 병렬 쓰기를 위해 추가 CPU를 활용할 수 있을 때요. 일부 커넥터는 압축이나 다른 요인 때문에 쓰기 시 CPU에서 병목이 될 수 있어요. 너무 높게 설정하면 과도한 리소스 활용으로 클러스터가 과부하될 수 있어요.

task.interrupt-stuck-split-tasks-enabled

Trino가 멈춘(stuck) 스플릿을 포함한 태스크를 감지하고 실패시키는 것을 활성화할지 여부예요. task.interrupt-stuck-split-tasks-timeouttask.interrupt-stuck-split-tasks-detection-interval로 지정할 수 있어요. 제3자 Joni 정규 표현식 라이브러리에 의해 차단된 스레드에만 적용돼요.

task.interrupt-stuck-split-tasks-warning-threshold

  • 타입: duration
  • 최솟값: 1m
  • 기본값: 10m

/v1/maxActiveSplits 엔드포인트에 콜 스택을 출력하고, 임계값보다 오래 실행되는 스플릿에 대한 JMX 메트릭을 생성해요.

task.interrupt-stuck-split-tasks-timeout

  • 타입: duration
  • 최솟값: 3m
  • 기본값: 10m

태스크를 실패시키기 전에 Trino가 차단된 스플릿 처리 스레드를 기다리는 시간이에요. 제3자 Joni 정규 표현식 라이브러리에 의해 차단된 스레드에만 적용돼요.

task.interrupt-stuck-split-tasks-detection-interval

  • 타입: duration
  • 최솟값: 1m
  • 기본값: 2m

Trino가 task.interrupt-stuck-split-tasks-timeout을 초과하는 처리 시간을 가진 스플릿을 확인하는 주기예요. 제3자 Joni 정규 표현식 라이브러리에 의해 차단된 스레드에만 적용돼요.

더 알아보기 (Learn more)

라이터 수를 스케일링하는 방법이 궁금하다면 라이터 스케일링 속성(Writer scaling properties) 문서를 이어서 읽어 보세요.