=================================
=================================
=================================
출처: http://202psj.tistory.com/
파이어폭스 플러그인에 sqlmanger 를 설치후
파이어폭스-> 도구 -> sqlite manger 실행
데이타베이스 connect 후 위에 메뉴에 Datebase -> Compect Database
메뉴이름대로 있는 데이터대로 용량이 된다.
=================================
=================================
=================================
//auto_vacuum 관련해서 이야기가 많으니 잘 찾아보고 상황판단뒤 사용해보도록 하자 (auto_vacuum ,속도.효율성 관련해서 문제가 있을수도 있다.)
PRAGMA auto_vacuum = 1;
그렇지 않으면, DELETE FROM TABLE을 이용해서 모든 내용을 비워도, DB파일의 크기가 줄어들지 않을 것이다.
TABLE 생성이후에는 방법이 없다. DROP 시키고, 새로 TABLE을 만들어야 하고, 그 전에 저 구문을 적용해야 한다.
References
http://www.sqlite.org/pragma.html#pragma_auto_vacuum
=================================
=================================
=================================
출처: http://cybershin.x-y.net/wiki/index.php/Vacuum_example
auto_vacuum pragma를 사용하면 현재의 Auto Vacuum 모드를 확인하거나 세팅할 수 있습니다. 아래와 같이 인자를 설정하지 않으면 현재 모드를 확인할 수 있습니다.
PRAGMA auto_vacuum;
또한 다음과 같이 Auto Vacuum 모드를 설정할 수 있습니다.
PRAGMA auto_vacuum = 0 | NONE | 1 | FULL | 2 | INCREMENTAL;
빌드옵션을 주지 않은 이상, Auto Vacuum 모드는 꺼져 있는 것이 기본입니다( 0 | NONE ). 이 상태에서는, 데이터베이스에 delete를 하더라도 데이터 파일의 용량이 줄어들지 않습니다. 즉, 강제로 "VACUUM" 구문을 실행하지 않는 다면 데이터 사이즈는 그대로입니다. auto_vacuum을 1이나 FULL로 설정하면, commit 될 때 마다 빈 페이지들을 데이터베이스 파일의 끝부분으로 이동시키고 잘라내게 됩니다. auto_vacuum을 2나 incremental로 설정하면, 따로 incremental_vaccum pragma를 쓰지 않는 이상, 파일을 잘라내지 않습니다. 이 모드는 FULL auto_vacuum 모드일 때의 단편화(fragmentation) 현상을 해결하기 위한 실험적인 모드입니다.
간단한 테스트로 얼마나 효과가 있는지 테스트해 보도록 하겠습니다. 0에서 999까지 정수를 테이블에 입력하는데, no_vacuum.db 파일에는 auto_vacuum 모드를 꺼 놓고 입력하고, vacuum.db 파일에는 auto_vacuum 모드를 켜 놓고 입력해 보도록 하겠습니다.
int capi_example_temp() { sqlite3 *db; char sql[255]; int i; // auto_vacuum = 0 sqlite3_open("no_vacuum.db", &db); sqlite3_exec(db, "PRAGMA auto_vacuum=0;" // auto_vacuum을 OFF. "CREATE TABLE IF NOT EXISTS tblTest(id int);", NULL, NULL, NULL); for(i=0;i<1000;i++){ sprintf(sql, "INSERT INTO tblTest(id) VALUES (%d);", i); sqlite3_exec(db, sql, NULL, NULL, NULL); } sqlite3_exec(db, "DELETE FROM tblTest WHERE id>=0;", NULL, NULL, NULL); sqlite3_close(db); // auto_vacuum = 1 sqlite3_open("vacuum.db", &db); sqlite3_exec(db, "PRAGMA auto_vacuum=1;" // auto_vacuum을 ON. "CREATE TABLE IF NOT EXISTS tblTest(id int);", NULL, NULL, NULL); for(i=0;i<1000;i++){ sprintf(sql, "INSERT INTO tblTest(id) VALUES (%d);", i); sqlite3_exec(db, sql, NULL, NULL, NULL); } sqlite3_exec(db, "DELETE FROM tblTest WHERE id>=0;", NULL, NULL, NULL); sqlite3_close(db); return 0; }
no_vacuum.db, 13KB vacuum.db, 3KB
파일 사이즈가 엄청나게 차이나는 것이 보이시죠? 파일 사이즈 이외에도 유의하셔야 할 점이 있는데 rowid의 변경입니다. 아래의 SQL구문을 보시면 VACUUM을 하게 될 경우 rowid도 변경되는 것을 보실 수 있습니다. 즉, rowid를 참조할 경우에는 조심하셔야 합니다.
sqlite> CREATE TABLE tblTest(id INTEGER, fruit TEXT); sqlite> sqlite> INSERT INTO tblTest(id, fruit) VALUES(10, 'apple'); sqlite> INSERT INTO tblTest(id, fruit) VALUES(20, 'banana'); sqlite> INSERT INTO tblTest(id, fruit) VALUES(30, 'orange'); sqlite> INSERT INTO tblTest(id, fruit) VALUES(40, 'tomato'); sqlite> sqlite> SELECT rowid, id, fruit FROM tblTest; rowid id fruit ---------- ---------- ---------- 1 10 apple 2 20 banana 3 30 orange 4 40 tomato sqlite> DELETE FROM tblTest WHERE id in (20, 30); sqlite> VACUUM; sqlite> SELECT rowid, id, fruit FROM tblTest; -- rowid를 새로 만듬 rowid id fruit ---------- ---------- ---------- 1 10 apple 2 40 tomato
또한, VACUUM은 Attach 된 데이터베이스에는 영향을 미치지 않습니다.
=================================
=================================
=================================
'프로그래밍 관련 > DB SQL' 카테고리의 다른 글
[DB] Sqlite 버전 관리 관련 (0) | 2014.04.09 |
---|---|
SQL Select 갯수 제한 또는 설정 관련 (0) | 2012.06.15 |
SQLLite - c++ 연동하기 관련 (0) | 2011.06.15 |
ADO(ActiveX Data Object) - CONNECTION객체 (0) | 2011.02.09 |
사내 공통 DB 서버 mssql , ADO 연결시 80004005에러코드 문제점(WIN NT계열아니면 많이 일어남) (0) | 2011.02.09 |