정의
트랜잭션들이 동시에 수행될 때, 일관성을 해치지 않도록 데이터 접근을 제어하는 기능
낙관적 락, 비관적 락으로 나뉨.
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. 락 타임아웃을 이용하여 잠금 해제 시간을 조절함.
'데이터베이스' 카테고리의 다른 글
데이터베이스 인덱스, 디스크i/o (0) | 2022.11.11 |
---|---|
데이터베이스 인덱싱하기 (0) | 2022.10.30 |
데이터베이스 트리거, 프로시저, 사용자 정의 함수 개념 정리 (1) | 2022.09.25 |
데이터베이스 정규화 1,2,3,bcnf,4,5 / 트랜잭션 acid / 삽입 삭제 갱신 (0) | 2022.09.21 |
데이터베이스편 (0) | 2022.09.21 |