SQLite FAQ에서 다음을 알고 있습니다.
여러 프로세스가 동시에 동일한 데이터베이스를 열 수 있습니다. 여러 프로세스가 동시에 수행 될 수 있습니다
SELECT
. 그러나 한 번에 하나의 프로세스 만 데이터베이스를 변경할 수 있습니다.
그래서, 지금까지 나는 내가 할 수있는 이해 : 1) 읽기 여러 스레드에서 데시벨 ( SELECT
) 여러 스레드 2) 읽기 데시벨 ( SELECT
단일 스레드에서)와 쓰기 ( CREATE
, INSERT
, DELETE
)
그러나 독자가 작성자를 차단하지 않고 작성자가 독자를 차단하지 않기 때문에 동시성을 제공하는 Write-Ahead Logging 에 대해 읽었습니다 . 읽기와 쓰기가 동시에 진행될 수 있습니다.
마지막으로, 나는 그것을 발견했을 때 완전히 혼란 스럽다 .
SQLITE_LOCKED 오류가 발생하는 다른 이유는 다음과 같습니다.
- 에 시도
CREATE
또는DROP
잠시 테이블이나 인덱스SELECT
문이 아직 보류 중입니다.- a
SELECT
가 동일한 테이블에서 활성화되어 있는 동안 테이블에 쓰려고 합니다.SELECT
sqlite가 설정되지 않은 경우 멀티 스레드 응용 프로그램에서 동일한 테이블에서 동시에 두 가지 작업을 시도합니다 .- fcntl (3, F_SETLK DB 파일 호출 실패. 예를 들어 NFS 잠금 문제로 인해 발생할 수 있습니다.이 문제에 대한 한 가지 해결책은 DB를 mv로 제거한 다음 다시 복사하여 새로운 Inode 값을 갖도록하는 것입니다.
그래서, 나는 스스로를 분명히하고 싶습니다. 자물쇠를 피해야합니까? 두 개의 다른 스레드에서 동시에 읽고 쓸 수 있습니까? 감사.
isolation_level=None
그래도 세트까지 잠금 문제가있었습니다 . 공유 캐시 모드가 없으면 스레드간에 인스턴스를 어떻게 공유합니까?