본문 바로가기
C.W.K.
Stream
Lesson 08 of 10 · published

VACUUM, Page Size, Cache

~12 min · vacuum, page-size, cache, maintenance

Level 0Scout
0 XP0/80 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

디스크 정리와 메모리 튜닝

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이 있는데, 그것도 나름의 대가가 있어.

Code

Storage 튜닝 시퀀스·sql
-- 현재 설정 검사
PRAGMA page_size;        -- 4096
PRAGMA cache_size;       -- -2000  (~2 MB; SQLite 기본)
PRAGMA page_count;       -- DB 의 page 수
PRAGMA freelist_count;   -- 재사용 가능 page

-- Read-heavy 워크로드 더 큰 cache (64 MB)
PRAGMA cache_size = -65536;

-- 큰 삭제 후 공간 회수
VACUUM;
테이블별 크기 — 용량 계획에 요긴해·sql
-- dbstat virtual 테이블이 standard 빌드에 로드됨
SELECT name, sum(payload) AS bytes
FROM   dbstat
GROUP  BY name
ORDER  BY bytes DESC;

External links

Exercise

최근에 수백만 row를 지운 DB에서 VACUUM 전후의 파일 크기를 재봐. VACUUM에 걸린 시간과 되찾은 공간을 적어둬. 그다음 cache_size를 -2000(2 MB)과 -65536(64 MB)으로 바꿔가며, cache가 차갑거나 따뜻할 때 범위 훑기의 지연이 어떻게 달라지는지 비교해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.