* 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 |