* sqlite auto_vacuum 설정 선택, 장단점 해설

 auto_vacuum 설정 (NONE or FULL)

http://www.sqlite.org/pragma.html


PRAGMA auto_vacuum = 0 | NONE | 1 | FULL | 2 | INCREMENTAL;

auto_vacuum 설정은 테이블 생성전에 실행되어야 한다.
테이블이 생성된 후에는 변경할수 없다.

데이터 베이스의 auto_vacuum 모드를 바꾸려면
PRAGMA auto_vacuum = xx; 실행후 VACUUM 명령어를 실행해야 적용된다

//=================
// 파일 용량 테스트

- 방법
db 파일 지우고 6만개 레코드 생성
띄엄띄엄 3만개 지우고, 3만개 생성( 전체 6만)


- 결과
- NONE : 3660kb -> 5512kb
- FULL : 3668kb -> 5520kb
- INCREMENTAL : 3668kb -> 5520kb
    - 여러 쿼리를 테스트 결과 속도도 차이가 나지 않는다(단편화 시뮬레이션은 못해봄)


//
NONE 이라고 해서 무조건 파일이 커지는 것은 아니다
    - 레코드를 지우면 프리리스트에 등록되고 추가시 다시 활용된다
    - 파일크기가 작아지지는 않는다.

FULL 이라고 해서 실시간으로 정리하고 작아지는 것도 아니다
    - commint 때 마다 프리리스트를 데이터의 끝으로 옮길 가능성을 높이는 것뿐
    - 단편화가 더 심해질수 있다.

INCREMENTAL
    - 별도로 PRAGMA incremental_vacuum(N); 를 호출해야 효과가 있다.
        - 프리리스트 중에서 N개의 페이지를 지운다



//=================
// 추천 옵션
나는 그냥 NONE 모드로 가기로 했다.
적당한 시기에 가끔 VACUUM 명령어를 실행해준다.
    - 주의! 대형 DB에서 VACUUM 은 긴시간이 필요
    1500만레코드(902Mbyte) DB에서 15초 걸림

 - 초당 1백만개(60Mbyte) 청소(vacuum)가능(i7, SSD)


//
참고
* 쿼리시간
900M (1500만레코드) 에서도 쿼리 자체는 걸리는 시간이 거의 0이다
쿼리결과 처리시간은 1초에 50만개 정도


반응형

'Code > Database (DB)' 카테고리의 다른 글

FireFox DB(sqlite) 정리  (0) 2017.02.14
손상된 SQLite 데이터베이스 파일 복구  (0) 2015.07.18
MDB 파일 관리 - SQL 명령  (0) 2015.01.15
SQL 명령어 요약  (0) 2012.08.19
SQLite 사용법 정리  (0) 2012.08.18
Posted by codens