내 워크로드가 느려요
내 워크로드가 느려요 (My Workload Is Slow - my-workload-is-slow)
DuckDB 워크로드가 느리다면 당황하지 말고, 체크리스트를 하나씩 따라가 보세요. 대부분의 경우 원인을 빠르게 짚을 수 있어요. 각 항목에 대해 더 자세한 설명이 링크로 연결돼 있으니 필요할 때 따라가면 됩니다.
문제 해결 체크리스트 (Troubleshooting Checklist)
DuckDB에서 워크로드가 느리다면 다음 체크들을 수행해 보세요. 각 항목마다 더 자세한 지침이 연결돼 있어요.
1. 메모리가 충분한가요? DuckDB는 스레드당 1-4 GB 메모리가 있을 때 가장 잘 작동해요.
2. 시스템이 메모리를 과도하게 커밋해서 운영체제가 스와핑하도록 만들고 있나요?
기본값인 전체 RAM의 80%에서 메모리 양을 줄여보세요. SET memory_limit = '...';를 사용해요. 반직관적으로 들리지만, 다른 프로세스가 시스템 메모리의 20% 이상을 쓰고 있을 가능성이 높은 메모리 제약 환경에서는 때로 쿼리 성능이 개선될 수 있어요.
3. 빠른 디스크를 사용하고 있나요? 네트워크 연결 디스크(클라우드 블록 스토리지 같은)는 쓰기 집약적 워크로드와 메모리보다 큰 워크로드를 느리게 만들어요. 클라우드 환경에서 그런 워크로드를 실행하려면 인스턴스 연결 스토리지(NVMe SSD) 를 사용하는 걸 권장해요.
4. 인덱스나 제약 조건(primary key, unique 등)을 사용하고 있나요? 가능하다면 이것들을 비활성화해 보세요. 로드와 업데이트 성능이 향상돼요.
5. 올바른 타입을 사용하고 있나요?
예를 들어 datetime 값을 인코딩할 때는 TIMESTAMP를 사용하세요.
6. Parquet 파일에서 읽고 있나요? 그렇다면 파일에 100k에서 1M 사이의 row group 크기와 100 MB에서 10 GB 사이의 파일 크기가 있나요?
7. 쿼리 플랜이 올바른가요?
EXPLAIN으로 플랜을 연구해 보세요.
8. 워크로드가 병렬로 실행되고 있나요?
htop이나 운영체제의 작업 관리자로 관찰해 보세요.
9. DuckDB가 스레드를 너무 많이 사용하고 있나요? 스레드 수를 제한해 보세요.
다른 흔한 문제를 알고 계신가요? 그렇다면 페이지 하단의 Report content issue 링크를 클릭해 해결 방법과 함께 설명해 주세요.