SQLite WAL 모드 활성화 후에도 ANALYZE 명령어의 중요성을 간과하여 쿼리 성능 저하 경험
대량 데이터 삭제 작업 시 트랜잭션 문제로 인한 동시 쓰기 충돌 및 워커 크래시 발생
Restic, Litestream 등 다양한 백업 방식 소개 및 AWS 연동 시 자격 증명 관리의 어려움 토로
PostgreSQL과 같은 관계형 데이터베이스의 동시 쓰기 지원 필요성 재확인
본문에서는 4000개 행의 테이블에서 FTS5를 사용한 전체 텍스트 검색 쿼리가 5초 걸렸으나, ANALYZE 명령어 실행 후 0.05초로 단축된 경험을 공유합니다. ANALYZE는 쿼리 플래너(Query Planner)가 더 나은 실행 계획을 세우도록 테이블 통계 정보를 생성하며, 이를 통해 쿼리 성능(Query Performance)을 극적으로 향상시킬 수 있음을 시사합니다. 댓글에서는 `.expert` 모드를 통해 쿼리 플랜을 분석하는 방법을 제시하며, 인덱스 생성(Index Creation)의 중요성도 함께 언급됩니다.
대량 데이터 삭제 작업 시 5초 이상 소요되어 다른 워커의 쓰기 작업이 타임아웃되고 VM이 종료되는 문제를 겪었습니다. 이는 SQLite의 단일 쓰기 트랜잭션(Single Writer Transaction) 제한 때문이며, PostgreSQL과 같은 다중 쓰기 지원 데이터베이스(Multi-Writer Database)의 필요성을 강조합니다. 커뮤니티에서는 배치 삭제(Batch Deletion), 삭제 간 지연 시간(Delay Between Batches) 추가, 또는 SELECT로 rowid 사전 로드 등의 해결책이 제시되었습니다. ORM의 벌크 삭제(Bulk Delete) 메서드 부재가 원인일 수 있다는 의견도 있습니다.
Restic을 이용한 `VACUUM INTO` 방식과 Litestream을 이용한 증분 백업 방식을 소개합니다. 특히 AWS S3 백업 시 자격 증명 생성(Credential Generation)의 번거로움이 지적되었으며, 이를 해결하기 위한 `s3-credentials` 도구 사용 경험이 공유되었습니다. 또한, 압축률이 높은 `.sql.zst` 포맷을 사용하거나, 백업 성공 시 이메일 알림을 보내는 등 백업 모니터링(Backup Monitoring)의 중요성도 강조되었습니다.
본문은 소규모 웹사이트에서 SQLite를 사용하며 겪는 어려움을 토로하며, 복잡성이 증가할수록 PostgreSQL과 같은 '진짜' 데이터베이스(Real Database)의 필요성을 언급합니다. 댓글에서도 유사한 의견이 많으며, SQLite는 로컬 시스템(Local Systems)에 적합하고 네트워크 연결이나 동시 요청 처리가 필요할 때는 PostgreSQL이 더 나은 선택임을 강조합니다. LLM 코딩 에이전트의 도움으로 복잡한 마이그레이션도 가능해졌다는 의견도 있습니다.