4. 성능 최적화 및 모범 사례
Trino는 대규모 데이터 처리에서 효율적이지만, 최적의 성능을 얻기 위해서는 적절한 쿼리 작성과 설정 최적화가 중요합니다. 여기서는 쿼리 성능을 향상시키는 주요 방법들을 소개합니다.
4.1. 쿼리 최적화 기법
- 필터링 먼저: 가능한 한 일찍
WHERE절을 사용하여 데이터를 필터링하여 처리해야 할 데이터 양을 줄입니다. - 필요한 컬럼만 선택:
SELECT *대신 필요한 컬럼만 명시적으로 선택합니다. 이는 네트워크 전송량과 메모리 사용량을 줄입니다. - 조인 순서 최적화: 작은 테이블을 먼저 조인하여 중간 결과 집합의 크기를 최소화합니다. Trino의 조인 최적화는 매우 발전했지만, 명시적인 힌트나 순서 지정을 통해 더 나은 결과를 얻을 수 있습니다.
- GROUP BY 및 ORDER BY 최적화:
GROUP BY또는ORDER BY절에 사용되는 컬럼의 카디널리티(고유 값 수)가 낮으면 성능이 향상될 수 있습니다.
4.2. 데이터 소스 최적화
Trino는 데이터 소스 자체의 최적화에 크게 의존합니다.
- 파티셔닝: 데이터가 날짜, 지역 등으로 파티셔닝되어 있으면 쿼리가 특정 파티션만 스캔하도록 하여 성능을 극적으로 향상시킬 수 있습니다.
- 컬럼 형식: Parquet, ORC와 같은 컬럼 기반 파일 형식은 Trino가 필요한 컬럼만 읽을 수 있도록 하여 I/O를 줄입니다.
- 인덱싱: 관계형 데이터베이스의 경우 적절한 인덱스는 쿼리 성능에 큰 영향을 미칩니다.
4.3. Trino 서버 구성 최적화
- 메모리 설정: Trino 서버의 힙 메모리와 쿼리 실행 메모리 제한을 적절히 설정합니다.
query.max-memory,query.max-memory-per-node. - 코디네이터/워커 분리: 대규모 프로덕션 환경에서는 코디네이터(쿼리 플래닝)와 워커(쿼리 실행)를 별도의 노드에 배포합니다.