Trino에서 느린 쿼리 실행 계획을 분석해 개선한 경험
인턴 때 Trino로 여러 데이터 소스를 조인하는 쿼리가 10분이 넘게 걸렸습니다. 처음엔 데이터 양 문제라고 생각했는데, Trino의 EXPLAIN ANALYZE로 실행 계획을 보니 조인 순서가 비효율적으로 선택돼 있었습니다.
큰 테이블과 작은 테이블 조인 시 브로드캐스트 조인을 명시적으로 힌트로 지정했습니다. 작은 테이블을 각 워커에 뿌려서 처리하는 방식으로 바꾸니 8분에서 45초로 줄었습니다.
처음엔 힌트를 잘못 써서 오히려 메모리 부족 에러가 났습니다. 브로드캐스트할 테이블이 워커 메모리보다 크면 역효과가 난다는 걸 그때 배웠습니다. 분산 쿼리 최적화는 실행 계획을 먼저 읽고 병목을 파악하는 것에서 시작한다는 기준이 그때 생겼습니다.