커뮤니티GeekNews / Hada
돌아온 페인트공 Shlemiel: Zig의 libc 재작성이 SQLite를 느리게 만든 과정
Rust 기반 체스 분석 서비스에서 4만 건의 JSON 데이터를 SQLite에 저장할 때 CPU 코어 하나가 포화되며 작업이 수 분간 지연되는 문제가 발생했습니다. 조사 결과, Linux용 SQLite 컴파일 시 사용된 Zig의 libc 재구현 라이브러리 내 `strspn` 함수 로직이 원인이었습니다. 해당 함수는 토큰화 과정에서 문자열의 남은 길이를 매번 전체 순회하며 측정하는 방식으로 설계되어, 1.2MB 크기의 파일 처리 시 약 12,000배의 성능 저하를 초래하는 이차 시간 복잡도 문제를 야기했습니다.
주요 내용
-
Rust 기반 서비스에서 SQLite를 통한 JSON 데이터 저장 시 심각한 성능 저하와 CPU 포화 현상이 발생했습니다.
-
문제의 원인은 Zig의 libc 재구현체 내 `strspn` 함수가 토큰화 시 문자열 길이를 반복적으로 측정하여 이차 시간 복잡도를 유발한 것이었습니다.
-
이로 인해 1.2MB 크기의 파일 처리 속도가 일반적인 상황보다 약 12,000배 느려지는 결과가 나타났습니다.