IT 와 DT/조각모음

Database Lock 데이터베이스 락

Eyhad 2023. 1. 11. 09:13

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을 이용해 잠금해제 시간을 조절

 

 

https://youtu.be/ZXV6ZqMyJLg

'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