디스크 정리와 메모리 튜닝
storage 층에서 SQLite 성능을 좌우하는 손잡이가 셋 있어.
- VACUUM — DB 파일을 통째로 다시 만들어서 지운 row가 남긴 공간을 회수하고 B-tree 조각을 정리해. 파일 전체를 다시 쓰니까 느려. 크게 지운 뒤에 가끔 돌리면 좋아.
- PRAGMA page_size = N — B-tree가 저장하는 단위야. 3.12부터 기본이 4096 byte고. page가 크면 순차로 훑을 때 I/O가 줄지만 작은 row에서는 버리는 공간이 늘어. 테이블을 만들기 전에 정하거나, 바꾼 다음 VACUUM을 돌려야 해.
- PRAGMA cache_size = N — 메모리에 두는 page cache야. 음수를 주면 KiB 단위로 읽어.
-64000이면 64 MB지. cache가 크면 디스크를 덜 때려.
Warning:
VACUUM은 DB 크기의 최대 두 배까지 임시 디스크를 먹어. 50 GB짜리 DB면 100 GB를 비워둬야 한다는 뜻이야. 미리 계산해둬. 대안으로 일을 조금씩 나눠 하는 auto_vacuum이 있는데, 그것도 나름의 대가가 있어.