1. 데이터베이스에 잠금(lock)이 왜 필요할까?
- 동시성 제어 : 트랜잭션들이 동시에 수행될 때, 일관성을 해치지 않도록 데이터 접근을 제어하는 DBMS의 기능
2. Lock의 종류 - 낙관적, 비관적 잠금
- 낙관적 잠금 (Optimisstic Lock) : 동시 업데이트가 거의 없는 경우
한 사용자가 업데이트를 완료하면, 동시 업데이트 확약을 시도하는 다른 사용자들에게 충돌이 있음을 알림.
충돌 발생시 나중에 시도하는 사용자 rollback.
- 비관적 잠금 (Pessimistic Lock) : 동시 업데이트가 빈번한 경우, 외부 시스템과 연동한 경우
다른 사용자는 먼저 시도한 사용자가 변경을 확약해서 레코드 잠금을 릴리스할 때까지 대기해야 함
3. Lock 연산의 종류
1) Shared lock (s-lcok,공용 lock)
- read 연산 실행 가능, write 연산 실행 불가능
- 데이터에 대한 사용권을 여러 트랜잭션이 함께 가질 수 있음
2) Exclusive lock (x-lock, 배타 lock)
- 배타 lock 연산을 실행한 트랜잭션만 해당 데이터에 대한 독점권을 가짐.
- read 연산과 write 연산을 모두 실행 가능
4. Lock의 단위
5. Lock으로 발생할 수 있는 문제점 - 블로킹, 데드락
- 귀찮은데 lock을 큰 단위로 하나 걸거나 작은 단위로 여기저기 걸어버리면 안되나요 ?
→ 안됩니다. blocking 때문.
1) Blocking
- Lock들의 경합니 발생하여 특정 세션이 작업을 진행하지 못하고 멈춰 선 상태
- why? 데이터에 대해 하나의 트랜잭션이 배타 lock을 걸면 다른 트랜잭션들은 어떠한 lock도 걸지 못하고 대기해야 하기 때문.
- 블로킹이 풀리는 시점은? 트랜잭션이 commit 또는 rollback 할 때
- 해결 방안? ① 트랜잭션을 짧게 정의, ② 같은 데이터를 갱신하는 트랜잭션이 동시에 수행되지 않도록 설계, ③ Lock Timeout을 이용해 잠금해제 시간을 조절
2) Deadlock 교착상태
- 해결 방안? ① 트랜잭션 진행방향을 같은 방향으로 처리 (블로킹은 발생할 수 있지만, 데드락 방지 가능), ② 트랜잭션 처리속도를 최소화, ③ Lock Timeout을 이용해 잠금해제 시간을 조절
'IT 와 DT > 조각모음' 카테고리의 다른 글
Data Measurement Chart (0) | 2022.10.14 |
---|---|
[파이썬 Python] PDF에서 text 추출해 txt파일 저장하기 (0) | 2022.09.16 |
OSI 7 계층 (OSI 7 Layer) (1) | 2022.09.14 |