로킹이란 한 트랜잭션이 먼저 접근한 데이터에 대한 연산을 끝낼 때까지 다른 트랜잭션이 그 데이터에 접근하지 못하도록 상호배제하는 것
1. 기본 로킹 규약
- 데이터에 접근하기 위해 먼저 lock 연산을 실행해 데이터에 대한 독점권 획득
(다른 트랜잭션은 lock 연산된 데이터를 사용할 수 없고 다시 lock 연산할 수 없다.)
- 독점권을 실행한 데이터에 대한 연산이 종료되면 트랜잭션은 unlock 연산으 실행해 데이터에 대한 독점권 반환
lock - 트랜잭션이 데이터에 대한 독점권 요청하는 연산
unlock - 트랜잭션이 데이터에 대한 독점권 반환하는 연산
2. lock 연산 종류
shared lock
- 해당 데이터에 대한 read 연산 가능하지만, write 연산 실행 불가
- 해당 데이터에 대한 다른 트랜잭션도 공용 lock 연산 동시 실행 가능
exclusive lock
- 해당 데이터에 대한 read 연산과 write 연산 모두 실행 가능
- 해당 데이터에 다른 트랜잭션은 lock 연산 불가
3. 2PL(2 Phase Locking)
기본 로킹 규약을 지키더라도 문제가 생길 수 있다.
2PL - 직렬 가능 스케줄을 보장하는 규약
트랜잭션이 lock과 unlock 연산을 확장 단계와 축소 단계로 나누어 수행
확장 단계 - 트랜잭션이 lock 연산만 실행할 수 있고, unlock 연산은 실행할 수 없는 상태
축소 단계 - 트랜잭션이 unlock 연산만 실행할 수 있고, lock 연산은 실행할 수 없는 상태