잠금은 DBMS에서 동시성 제어를 유지하는 데 필수적인 부분입니다. 잠금 기반 동시성 제어를 구현하는 모든 시스템의 트랜잭션은 필요한 잠금을 얻을 때까지 문을 읽거나 쓸 수 없습니다.
잠금 기반 프로토콜에는 두 가지 유형의 잠금이 있습니다.
다양한 잠금 프로토콜은 다음과 같습니다. -
트랜잭션은 쓰기 작업을 수행하기 전에 데이터 값에 대한 잠금을 획득합니다. 쓰기 작업이 완료된 후 잠금이 해제될 수 있습니다. 간단한 잠금 프로토콜의 예는 다음과 같습니다.
T1 | T2 |
---|---|
R(A) | |
R(A) | |
잠금( B ) | |
R(B) | |
W(B) |
|
잠금 해제(B) | |
잠금(C) | |
R(C) | |
W(C) | |
잠금 해제(C) | |
제출 | |
Commit |
위에는 두 개의 트랜잭션 T1과 T2가 표시됩니다. 읽기 작업에는 잠금이 필요하지 않지만 각 트랜잭션은 쓰기 작업 전에 잠금을 획득하고 나중에 잠금을 해제합니다.
2단계 잠금 프로토콜에는 성장 단계와 수축 단계라는 두 단계가 있습니다. 트랜잭션은 성장 단계에서만 잠금을 획득할 수 있습니다. 축소 단계에 들어가면 이전에 획득한 잠금을 해제할 수 있지만 새 잠금을 획득할 수는 없습니다. 배타적 잠금은 X로 표시되고 공유 잠금은 S로 표시됩니다. 2단계 잠금 프로토콜의 예는 다음과 같습니다.
R(A) | tr>|
W(B)
|
|
| |
잠금 해제(B) | |
잠금 해제(A)
|
|
제출 | |
| |
위의 예에서 A에서는 읽기 작업만 수행하므로 T1과 T2는 공유 변수 A를 사용하여 잠금을 공유합니다. T1은 쓰기 작업을 위해 B에 대한 배타적 잠금을 획득하고 곧 해제합니다. T2는 C와 동일한 작업을 수행합니다. | |
엄격한 2단계 잠금 프로토콜은 2단계 잠금 프로토콜과 유사합니다. 유일한 차이점은 엄격한 2PL 프로토콜에서 프로토콜이 획득한 모든 배타적 잠금은 프로토콜이 커밋되거나 중단될 때까지 유지되어야 한다는 것입니다. 엄격한 2단계 잠금 프로토콜의 예는 다음과 같습니다. | |
S(A) | |
R(A) | X(B) |
R(B) | |
W (B) | |
W(C)
잠금 해제(A) tr> | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
제출 | |||||||||||||||||||||||
잠금 해제(B) | |||||||||||||||||||||||
|
|||||||||||||||||||||||
위 예시에서 T1과 T2는 공유 잠금을 사용하여 변수 A를 공유합니다. 왜냐하면 A에서는 읽기 작업만 수행되기 때문입니다. T1은 쓰기 작업을 위해 B에 대한 배타적 잠금을 획득하고, T2는 C에 대한 배타적 잠금을 획득합니다. 배타적 잠금은 트랜잭션이 커밋된 후에만 해제됩니다. 그러나 공유 잠금에는 그러한 제한이 없습니다. 엄격한 2단계 잠금 프로토콜엄격한 2단계 잠금 프로토콜은 2단계 잠금 프로토콜과 엄격한 2단계 잠금 프로토콜의 확장일 뿐입니다. 잠금 프로토콜. 여기서는 공유든 배타적이든 관계없이 트랜잭션이 보유한 모든 잠금은 트랜잭션이 커밋되거나 중단될 때만 해제됩니다. 엄격한 2단계 잠금 프로토콜의 예는 다음과 같습니다.
|
위 내용은 DBMS에서 동시성 제어를 위해 잠금 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!