Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

DBMS에서 잠금을 사용한 동시성 제어


잠금은 DBMS에서 동시성 제어를 유지하기 위한 필수적인 부분입니다. 잠금 기반 동시성 제어를 구현하는 시스템의 트랜잭션은 필요한 잠금을 얻을 때까지 명령문을 읽거나 쓸 수 없습니다.

잠금 기반 프로토콜에는 두 가지 유형의 잠금이 있습니다. 다음과 같습니다.

  • 이진 잠금 - 잠금 또는 잠금 해제의 두 가지 상태 중 하나만 있을 수 있습니다.
  • 공유/독점 잠금 - 읽기 작업만 수행해야 하는 경우 공유 잠금이 획득됩니다. 데이터가 변경되지 않으므로 공유 잠금을 여러 트랜잭션 간에 공유할 수 있습니다. 쓰기 작업을 수행할 때 배타적 잠금이 사용됩니다. 배타적 잠금이 있는 트랜잭션만 데이터 값을 변경할 수 있습니다.

다른 잠금 프로토콜은 -

단순 잠금 프로토콜

쓰기 작업이 수행되기 전에 데이터 값에 대한 트랜잭션에 의해 잠금이 획득됩니다. 쓰기 작업 후에 잠금을 해제할 수 있습니다. 단순 잠금 프로토콜의 예는 다음과 같습니다.

T1 T2
R(A)

R(A)
잠금(B)
R(B)
W(B)
잠금 해제(B)

잠금(C)

R(C)

W(C)

잠금 해제(C)
커밋

커밋

위에 표시된 두 개의 트랜잭션 T1 및 T2가 있습니다. 읽기 작업에는 잠금이 필요하지 않지만 쓰기 작업 전에 이러한 각 트랜잭션이 잠금을 획득하고 이후에 해제합니다.

2단계 잠금 프로토콜

2단계 잠금 프로토콜에는 성장 단계와 축소 단계의 두 단계가 있습니다. 트랜잭션은 성장 단계에 있을 때만 잠금을 획득할 수 있습니다. 축소 단계에 들어가면 이전에 획득한 잠금을 해제할 수 있지만 새 잠금을 획득할 수는 없습니다. 배타적 잠금은 X로 표시되고 공유 잠금은 S로 표시됩니다. 2단계 잠금 프로토콜의 예는 -

입니다.
T1 T2
S(A)
R(A)

에스(A)

R(A)
X(B)
R(B)
W(B)

X(C)

R(C)

W(C)

잠금 해제(C)

잠금 해제(A)
잠금 해제(B)
잠금 해제(A)
커밋

커밋

위의 예에서 T1과 T2는 A에 대해 읽기 작업만 수행되므로 공유 잠금을 사용하여 변수 A를 공유합니다. T1은 쓰기 작업에 대해 B에 대한 단독 잠금을 획득하고 직후 해제합니다. T2는 C와 동일합니다.

엄격한 2단계 잠금 프로토콜

엄격한 2단계 잠금 프로토콜은 2단계 잠금 프로토콜과 유사합니다. 유일한 차이점은 엄격한 2PL 프로토콜에서 프로토콜이 획득한 모든 독점 잠금은 프로토콜이 커밋하거나 중단될 때까지 유지되어야 한다는 것입니다. 엄격한 2단계 잠금 프로토콜의 예는 다음과 같습니다.

T1 T2
S(A)
R(A)

에스(A)

R(A)
X(B)
R(B)
W(B)

X(C)

R(C)

W(C)

잠금 해제(A)
잠금 해제(A)
커밋
잠금 해제(B)

커밋

잠금 해제(C)

위의 예에서 T1과 T2는 A에 대해 읽기 작업만 수행하므로 공유 잠금을 사용하여 변수 A를 공유합니다. T1은 쓰기 작업에 대해 B에 대한 독점 잠금을 획득하고 T2는 C와 동일한 작업을 수행합니다. 독점 잠금은 해제된 경우에만 해제됩니다. 트랜잭션이 커밋된 후. 그러나 공유 잠금에는 그러한 경계가 없습니다.

엄격한 2단계 잠금 프로토콜

엄격한 2단계 잠금 프로토콜은 2단계 잠금 프로토콜과 엄격한 2단계 잠금 프로토콜의 확장일 뿐입니다. 여기서 공유 또는 독점 여부에 관계없이 트랜잭션이 보유한 모든 잠금은 트랜잭션이 커밋되거나 중단된 후에만 해제됩니다. 엄격한 2단계 잠금 프로토콜의 예는 다음과 같습니다.

T1 T2
S(A)
R(A)

S(A)

R(A)
X(B)
R(B)
W(B)

X(C)

R(C)

W(C)
커밋
잠금 해제(A)
잠금 해제(B)

커밋

잠금 해제(A)

잠금 해제(C)

위의 예에서 T1과 T2는 A에 대한 읽기 작업만 수행되므로 공유 잠금을 사용하여 변수 A를 공유합니다. T1은 쓰기 작업에 대해 B에 대한 독점 잠금을 획득하고 T2는 C와 동일한 작업을 수행합니다. 공유 잠금과 독점 잠금은 트랜잭션이 커밋된 후에만 해제됩니다.