- Published on
2026년 3월 3일, SQLite 개발자 Dan이 WAL 모드에서 드물게 데이터베이스를 손상시킬 수 있는 데이터 경합을 찾아 고쳤습니다. 이 버그는 WAL이 도입된 3.7.0(2010-07-21)부터 3.51.2(2026-01-09)까지 모든 버전에 들어 있었고, 3.51.3(2026-03-13)에서 수정됐습니다. 원인은 wal-index 헤더의 nBackfill 필드 하나를 서로 다른 두 락이 나눠 지키고 있었다는 것입니다 — 증가는 WAL_CKPT_LOCK 아래에서, 0으로 되돌리는 일은 WAL_WRITE_LOCK 아래에서 일어납니다. 다만 정직하게 말하면 이건 비상사태가 아닙니다. SQLite 팀조차 실험실에서 자연 발생시키지 못해 테스트 훅을 심어야 했고, 공개된 문서는 발생률이 SSD 고장이나 우주 방사선 히트의 예상 발생률 이하로 보인다고 밝히고 있습니다. 이 글은 WAL 되감기 메커니즘, 6단계 손상 시나리오, 재현할 수 없는 버그를 고쳤다고 말하는 방법, 3.52.0 철회로 꼬인 2주, 그리고 락파일 갱신 한 번에 조용히 취약 버전으로 되돌아간 실제 사례를 정리합니다.