내가 (그리고 아마도 WAL) SQLite는 VACUUM에 대한 두 가지 질문을했습니다에서 열 성공하려면?SQLite는 VACUUM는 여러 프로세스
• 왜 VACUUM은 효과가 없지만 (공간 재 확보 없음) Sqlite가 SQLITE3_OK를 반환합니까? 나는이 개 과정에 액세스 WAL 모드에서 데이터베이스를했습니다
:
은 내 문제에 대한 자세한 내용을 비트. 어떤 시점에서 사용자는 데이터베이스에서 데이터를 삭제할 수 있습니다. 데이터베이스는 여러 프로세스에서 열 수 있으므로 레코드를 삭제 한 다음 VACUUM을 실행하여 연결을 닫고 파일을 삭제하는 대신 디스크 공간을 회수합니다.
문제는 2 개의 프로세스가 DB 연결이 열렸을 때 프로세스 중 하나의 VACUUM이 확인을 반환하지만 실제로 공간을 회수하지 않는다는 것입니다.
나는 어떤 프로세스에서 미해결 SQL 문이있을 때까지 VACUUM이 성공하지 않는다고 생각한다. 문제는 두 프로세스가 서로를 인식하도록하고 싶지 않다는 것입니다.
내가 고려중인 것은 두 프로세스 모두에서 VACUUM을 수행하는 것이므로 마지막으로 (데이터를 삭제하라는 사용자 요청시) 연결을 마지막으로 종료하는 것이 공간 교정을 담당합니다. 또한 auto_vacuum을 고려하고 (나는 그것의 한계를 알고 있지만, h 제가이 데이터베이스에 매우 자주하지
진공 호출로 인해 SQLite 오류가 발생하지 않는 이유는 여전히 흥미로울 것입니다. –
SQLite_OK를 반환하면 실제로는 진공 상태가됩니다. –
디스크의 파일 크기는 동일하게 유지되지만 여러 번 검사했습니다. –