'언젠가 읽기' 컨텐츠는 논문이나 영문 컨텐츠 등 언젠가 읽으려고 즐겨찾기 하고선
읽지 않고 계속 미룰만한 컨텐츠를 읽고 요약하거나 소개합니다.
합리적인 SQLite 기본값
언젠가 읽기
2025. 2. 4. PM 8:00:45
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 명령어 가이드
-
웹 애플리케이션을 위한 데이터베이스 최적화 전략