본문 바로가기
데이터베이스

데이터베이스 락

by 흰색남자 2022. 10. 18.

정의

 트랜잭션들이 동시에 수행될 때, 일관성을 해치지 않도록 데이터 접근을 제어하는 기능

 

낙관적 락, 비관적 락으로 나뉨.

1. 낙관적 락 > 동시 업데이트가 없는 경우

데이터 갱신 시 경합이 발생하지 않을 것이라고 봄

한 사용자가 업데이트를 완료하면, 동시 업데이트 확약을 시도하는 다른 사용자들에게 충돌이 있음을 알림.

 

2. 비관적 락 > 동시 업데이트가 빈번하고, 외부 시스템과 연동한 경우

"동일한 데이터를 동시에 수정 할 가능성이 높다"라고 봄

다른 사용자는 먼저 시도한 사용자가 변경을 확약해서 레코드 락을 릴리즈 할 때까지 대기해야함.

 

2-1. 공용(share) 락

read 연산 실행 가능, write 연산 실행 불가능

데이터에 대한 사용권을 여러 트랜잭션이 함께 가질 수 있음

 

2-2 베타(exclusive) 락

read, write 연산 모두 실행 가능

베타 락 연산을 실행한 트랜잭션만 해당 데이터에 대한 독점권을 가짐.

 

 

데이터베이스       파일      레코드      필드

<                      ------------                      >

구현 단순                                       구현 어려움

병행성 하락                                    병행성 증가

 

 

락을 걸면 생길수 있는 문제점.

블록킹(Blocking) : 락들이 경합이 발생하여 특정 세션이 작업을 진행하지 못합.

- 데이터에 대해서 하나의 트랜잭션이 베타 락을 걸면 다른 트랜잭션들은 어떠한 락도 걸지 못하고 대기해야함.

블록킹이 풀리는 시점?

트랜잭션 커밋 or 롤백을 할 경우

 

블록킹

1. 트랜잭션 짧게 정의

2, 같은 데이터를 갱신하는 트랜잭션이 동시에 수행되지 않도록 설계

3. 락 타임아웃을 이용하여 잠금 해제 시간을 조절

 

 

데드락 : 시스템 자원에 대한 요구가 뒤엉킨 상태

- 상호 배제, 점유 대기, 비선점, 순환 대기의 4가지 조건을 만족해야 발생할 가능성이 생김

교착상태는 시스템에서 4가지 조건이 동시에 발생할때 나타남

 

상호배제 (mutual exclusion) 

- 자원이 최소 하나 이상 비공유 (한번에 한 프로세스에만 자원이 할당) 

 

점유와 대기 (hold and wait) 

- 최소 하나의 자원을 보유하면서 다른 프로세스에 할당된 자원을 대기 

 

비선점 (non-preemptive) 

- 다른 프로세스의 자원을 뺏을 수 없음 

 

순환대기 (circular wait) 

- 상대방이 가진 자원을 서로 대기

해결 방법

1. 트랜잭션 진행방향을 같은 방향으로 처리

2. 트랜잭션 처리속도를 최소화

3. 락 타임아웃을 이용하여 잠금 해제 시간을 조절함.