SQLite-진공

VACUUM 명령은 해당 내용을 임시 데이터베이스 파일에 복사하고 복사본에서 원본 데이터베이스 파일을 다시로드하여 기본 데이터베이스를 정리합니다. 이렇게하면 사용 가능한 페이지가 제거되고 테이블 데이터가 연속적으로 정렬되며 그렇지 않으면 데이터베이스 파일 구조가 정리됩니다.

VACUUM 명령은 명시 적 INTEGER PRIMARY KEY가없는 테이블 항목의 ROWID를 변경할 수 있습니다. VACUUM 명령은 주 데이터베이스에서만 작동합니다. 첨부 된 데이터베이스 파일을 VACUUM 할 수 없습니다.

활성 트랜잭션이 있으면 VACUUM 명령이 실패합니다. VACUUM 명령은 메모리 내 데이터베이스에 대해 작동하지 않습니다. VACUUM 명령은 데이터베이스 파일을 처음부터 다시 빌드하므로 VACUUM을 사용하여 많은 데이터베이스 별 구성 매개 변수를 수정할 수도 있습니다.

수동 진공

다음은 명령 프롬프트에서 전체 데이터베이스에 대해 VACUUM 명령을 실행하는 간단한 구문입니다.

$sqlite3 database_name "VACUUM;"

다음과 같이 SQLite 프롬프트에서 VACUUM을 실행할 수 있습니다.

sqlite> VACUUM;

다음과 같이 특정 테이블에서 VACUUM을 실행할 수도 있습니다.

sqlite> VACUUM table_name;

자동 진공

SQLite Auto-VACUUM은 VACUUM과 동일하지 않고 사용 가능한 페이지를 데이터베이스의 끝으로 이동하여 데이터베이스 크기를 줄입니다. 이렇게하면 VACUUM이 조각 모음을 보장하는 동안 데이터베이스를 크게 조각화 할 수 있습니다. 따라서 Auto-VACUUM은 데이터베이스를 작게 유지합니다.

SQLite 프롬프트에서 실행되는 다음 pragma로 SQLite 자동 청소를 활성화 / 비활성화 할 수 있습니다.

sqlite> PRAGMA auto_vacuum = NONE; -- 0 means disable auto vacuum
sqlite> PRAGMA auto_vacuum = FULL; -- 1 means enable full auto vacuum
sqlite> PRAGMA auto_vacuum = INCREMENTAL; -- 2 means enable incremental vacuum

명령 프롬프트에서 다음 명령을 실행하여 자동 진공 설정을 확인할 수 있습니다.

$sqlite3 database_name "PRAGMA auto_vacuum;"