DuckDB 비동기 I/O: 쿼리 속도 최대 3.7배 향상
Asynchronous I/O in DuckDB: Work, Thread, Work
DuckDB v2.0부터 Parquet 및 CSV 파일의 비동기 읽기를 지원합니다. 원격 스토리지(S3 등)에서 데이터를 읽을 때 동기 I/O가 네트워크 대역폭을 충분히 활용하지 못하는 문제를 해결합니다. EC2/S3 환경에서 TPC-H Q6 벤치마크 결과, 비동기 I/O 적용 시 실행 시간이 8.23초에서 2.84초로 약 3배 빨라졌고, 추가 튜닝 시 2.23초까지 단축되었습니다. 이는 읽기-미리 큐와 비동기 메모리 관리를 통해 가능해졌습니다.
동기 I/O를 사용하면 작업자 스레드가 데이터가 도착할 때까지 차단되어 디코딩, 집계 등의 실제 작업을 수행할 수 없습니다.
HN 토론
31- diarrhea
워커 풀이 코어 수만큼 스레드를 보유하는 것이 async 풀과 잘 어울리나요? 기본적으로 설계상 과도하게 구독되는 것 같은데요.
저는 한때 (Rust로) Rayon 워커 스레드 풀 4개와 Tokio async 풀 2개(멀티스레드 런타임)를 가진 시스템을 구축한 적이 있습니다. 6 vCPU 시스템에서 말이죠. 결국 잘 작동했습니다. Tokio는 기아 상태에 빠지지 않아 네트워크 요청을 낮은 지연 시간으로 처리했습니다.
한 가지 차이점은 DuckDB는 순수 네트워크 클라이언트라는 점입니다. async 스레드 중 하나가 기아 상태가 되어도 세상이 끝나는 것은 아닙니다 (예: k8s가 헬스 체크 응답 실패로 포드를 죽이지 않는 것처럼).
- NorthSouthNorth
22GB 원격 파일에 512GB RAM을 사용하는 것은 벤치마크로서는 좀 이상하게 느껴지지만, 아마도 많은 메모리 없이는 많은 코어를 얻을 수 없었기 때문일 수도 있겠네요.
- bburnett44
이런 비동기 I/O 아키텍처에 대한 심층 분석은 고성능 데이터 처리에 있어 순수한 엔지니어링 금맥입니다. 훌륭한 분석이네요.