목록으로
'언젠가 읽기' 컨텐츠는 논문이나 영문 컨텐츠 등 언젠가 읽으려고 즐겨찾기 하고선 읽지 않고 계속 미룰만한 컨텐츠를 읽고 요약하거나 소개합니다.

합리적인 SQLite 기본값

SQLite의 합리적인 기본 설정

Brian Douglas의 기사에서는 SQLite를 웹 애플리케이션에서 최적의 성능과 안정성을 제공하기 위해 설정할 수 있는 다양한 PRAGMA 명령어에 대해 설명합니다. 아래는 각 설정과 그 이유에 대한 설명입니다.

PRAGMA journal_mode = WAL;

이유: Write-Ahead Logging(WAL) 모드를 사용하면 동시 읽기와 쓰기가 가능해져 여러 사용자가 동시에 데이터베이스에 접근하는 웹 애플리케이션에 적합합니다.

PRAGMA synchronous = NORMAL;

이유: NORMAL 모드는 성능과 데이터 안전성의 균형을 맞추어 데이터가 디스크에 적절한 시간 내에 기록되도록 보장하면서도 FULL 모드만큼 쓰기 속도를 느리게 하지 않습니다.

PRAGMA busy_timeout = 5000;

이유: 데이터베이스가 잠겨있는 동안 5초간 대기하게 설정하여 "database is locked" 오류를 방지합니다. 이는 여러 동시 접근을 처리할 때 유용합니다.

PRAGMA cache_size = -20000;

이유: 캐시 크기를 20MB로 설정하여 메모리에 더 많은 데이터를 캐시할 수 있게 합니다. 이는 디스크 읽기 횟수를 줄여 쿼리 성능을 향상시킵니다.

PRAGMA foreign_keys = ON;

이유: 외래 키 제약 조건을 활성화하여 테이블 간의 일관된 관계를 유지하고 참조 무결성을 보장합니다(예: 사용자, 게시물, 댓글 간의 관계).

PRAGMA auto_vacuum = INCREMENTAL;

이유: 행이 삭제될 때마다 점진적으로 디스크 공간을 회수하여 전체 vacuum을 수행하지 않고도 성능에 미치는 영향을 줄입니다.

PRAGMA temp_store = MEMORY;

이유: 임시 테이블과 기타 임시 데이터를 메모리에 저장하여 정렬 및 인덱싱과 같은 작업의 성능을 향상시킵니다. 이는 웹 애플리케이션에서 흔히 사용되는 작업입니다.

PRAGMA mmap_size = 2147483648;

이유: 2GB 크기의 메모리 매핑 I/O를 사용하여 디스크 I/O를 줄여 데이터베이스 접근 속도를 높입니다. 이는 빈번한 읽기 및 쓰기가 있는 대형 데이터베이스에 유리합니다.

PRAGMA page_size = 8192;

이유: 페이지 크기를 8KB로 설정하여 메모리 사용과 디스크 I/O 성능 간의 균형을 맞춥니다. 이는 많은 읽기와 쓰기를 처리하는 포럼 데이터베이스에 적합합니다.

설정 요약

아래는 설정을 복사하여 사용하기 위한 PRAGMA 명령어 목록입니다.
  • PRAGMA journal_mode = WAL;
  • PRAGMA synchronous = NORMAL;
  • PRAGMA busy_timeout = 5000;
  • PRAGMA cache_size = -20000;
  • PRAGMA foreign_keys = ON;
  • PRAGMA auto_vacuum = INCREMENTAL;
  • PRAGMA temp_store = MEMORY;
  • PRAGMA mmap_size = 2147483648;
  • PRAGMA page_size = 8192;

함께 읽으면 좋은 참고 자료

  • SQLite 공식 문서
  • PRAGMA 명령어 가이드
  • 웹 애플리케이션을 위한 데이터베이스 최적화 전략

푸딩캠프 뉴스레터를 구독하면 학습과 성장, 기술에 관해 요약된 컨텐츠를 매주 편하게 받아보실 수 있습니다.