태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
2014.08.31 18:44


sqlite 의 transaction mode 와 lock 의 종류 특성.



-
Transaction 은 deffered, immediate, exclusive 3가지 모드로 진행될 수 있다.

-
기본 transaction 은 deffered 이다.

-
DEFFERED 의 lock
    이 모드일 때 database 에 실질적인 action 이 있기 전까지는 lock 을 잡지 않는다.
    DB 에 read action 이 생기면 SHARED lock 이 걸린다.
    반대로 DB 에 첫 write action 이 생기면 RESERVED lock 이 걸린다.


-
IMMEDIATE 의 lock
    이 모드일 때는 begin 명령이 떨어지자마자 RESERVED lock 을 걸어버린다.
    이 상태에서는 BEGIN IMMEDIATE 나 BEGIN EXCLUSIVE 를 호출 할 수 없다.
    단 database 로부터 read 는 계속 가능한다.

-
EXCLUSIVE 의 lock
    이 모드일 때는 begin 명령이 떨어지자마자 EXCLUSIVE lock 을 건다.
    EXCLUSIVE lock 상태에서는 read uncommitted 이외에는 다른 db connection 은 불허된다.


-
SHARED lock
    read 가능하나 write 불가능한 lock.
    여러개의 SHARED lock 이 공존할 수 있다.



-
RESERVED lock
    process 가 db 의 write 를 계획중이라는 의미로 현재는 read 중이라는 의미이다.
한번에 하나의 RESERVED lock 을 잡을 수 있다.
    PENDING lock 과는 다르게 RESERVED lock 을 잡은 상태에서 추가로 SHARED lock 을 여러번 잡을 수 ( acquired ) 있다.

-
PENDING lock
    Java 의 일반적 lock 과 비슷한 개념으로 lock 을 잡는 순간 write 를 할 것이라는 의미.
    모든 SHARED lock 이 풀리기를 기다린 후 바로 EXCLUSIVE lock 을 잡는다는 의미이다.
    PENDING lock 이 active 된 상황에서는 추가로 SHARED lock 을 잡을 수 없다.

-
EXCLUSIVE lock
    db 에 쓰기 위한 lock 이다.
    EXCLUSIVE lock 은 다른 lock 과 동시에 존재할 수 없다.
    동시성을 위해 EXCLUSIVE lock 은 최소화하여 잡아야 한다.





댓글을 달아 주세요


Posted by 돼지왕왕돼지