티스토리 뷰
1. Pessimistic Lock (비관적 잠금)
항목 | 내용 |
특징 | - Pessimistic Concurrency Control(PCC) - 트랜잭션이 데이터를 수정할 때, 다른 트랜잭션의 접근을 미리 차단하여 충돌을 방지 - DB Built-In Lock :: DB내 내장된 락 메커니즘을 사용 -> 일관성 보장 |
사용 환경 | 쓰기 비중이 높고, 데이터 일관성 보장이 중요한 시스템 |
동시성 제어 방식 | 선락체크(Preemptive Locking) 방식 |
장점 | - 데이터 일관성 보장 - 높은 신뢰성 제공 |
단점 | - 동시성 감소, 데드락(Deadlock) 발생 위험 - 원인 :: (1)ORM 내 ID 생성을 위한 접속 시, 스레드 부족 + (2)같은 데이터 2개를 순서 / 역순 업데이트 |
잠금 단위 | - Table Lock :: 동시성 감소, 트랜잭션 제어 간단 - Row Lock :: 동시성 증가, 트랜잭션 제어 복잡 |
범주 | - Shared Lock (읽기 잠금) :: 다중 읽기 작업 허용 - Exclusive Lock (쓰기 잠금) :: 읽기 및 쓰기 작업 모두 차단 |
1.1 Locking 방식 및 종류
- Lock-based Concurrency Control
- 2PL (2 Phase Locking)
:: 2단계 잠금 방식을 사용하여 Serializable을 보장
:: 트랜잭션이 데이터를 잠그고, 잠금을 해제하는 순서에 따라 충돌을 방지 - 2PL의 확장
1) Strict 2PL (S2PL) :: 트랜잭션이 모든 락을 유지, 커밋되기 전까지 락을 해제 X
2) Rigorous 2PL (SS2PL) :: 트랜잭션이 완전히 완료된 후, 락을 해제하는 방식
- 2PL (2 Phase Locking)
잠금 종류 | 특징 |
1. 공유 락 / Shared Lock (S-lock) | - 데이터 읽기 작업 시 사용 - 여러 트랜잭션이 동시에 읽기 가능, 쓰기 불가 |
2. 배타적 락 / Exclusive Lock (X-lock) | - 데이터 수정 시 사용 - 읽기 및 쓰기 모두 차단, 다른 트랜잭션 접근 불가 |
3. Lock Release | - 트랜잭션이 끝나면 락을 해제하여 다른 트랜잭션이 접근 가능하도록 함 |
2. Optimistic Lock (낙관적 잠금)
항목 | 내용 |
특징 | - Non-locking Concurrency Control 혹은 Optimistic Concurrency Control(OCC) - 데이터 잠금을 사용하지 않고, 트랜잭션이 종료되기 직전에 충돌 여부를 검사 - 데이터 항목에 버전 번호 부여-> 작업 완료 시 버전 충돌 체크 및 충돌 시 해당 트랜잭션을 롤백 및 재시도 - SW적 Lock (데이터별 Versioning + OptimisticLockException를 직접 설정 필요) |
사용 환경 | 읽기 비중이 높고, 충돌 가능성이 적은 시스템 |
동시성 제어 방식 | 선작업 → 후버전체크 방식 |
장점 | - 높은 동시성 제공 - 성능 저하가 적음 |
단점 | - 신뢰성이 낮음 (버전 충돌 시 롤백 필요) - 버전 관리 및 예외 처리 필요 |
사용되는 시스템 | - Transaction(Lock)이 없는 비관계형 DB에서 자주 사용 - DynamoDB / Redis / Firestore / Elasticsearch |
충돌 처리 | - 버전 충돌 시 롤백 후 재실행 |
2.1 Optimistic Lock 기법의 종류
기법 | 설명 |
1. Timestamp-based Concurrency Control | - 트랜잭션 시작 시, 타임스탬프 부여 -> 타임스탬프에 맞춰 순차적으로 처리 |
2. Optimistic Concurrency Control (OCC) | - 트랜잭션이 읽기만 수행, 변경 작업은 나중에 진행 - 충돌 시 롤백 후 재실행 |
3. Multiversion Concurrency Control (MVCC) | - 여러 버전의 데이터를 동시에 저장 -> 트랜잭션 간의 독립적인 실행을 보장 - 버전을 통해 독립적인 처리를 통해 충돌 회피 |
2.2 Optimistic Lock 동작 방식
2.2-1) Optimistic Concurrency Control (OCC)
단계 | 설명 |
1. 읽기 | - 데이터를 읽고 버전 번호를 기록 |
2. 수정 시 버전 체크 | - 트랜잭션이 데이터를 수정하기 전에 버전 충돌 여부를 확인 |
3. 충돌 시 처리 | - 버전 충돌이 발생하면 롤백 후 재실행 |
4. 커밋 | - 충돌 없이 정상적으로 완료되면, 커밋하여 변경 사항을 반영 |
2.2-2) Multiversion Concurrency Control (MVCC)
A. 데이터베이스 내 다중 버전의 데이터를 저장 | B. 최신 버전의 데이터만 데이터베이스에 저장 |
:: PostgreSQL 에서 사용하는 방식 | :: Oracle, MySQL 에서 사용하는 방식 |
- Lock 기법만 적용된 DBMS 보다 훨씬 빠르게 동작
- 사용하지 않는 데이터가 매번 생기므로 데이터를 정리하는 시스템이 필요
- 데이터 버전이 충돌 시 애플리케이션 영역에서 (소프트웨어적으로) 문제를 해결
참고
ASAC 수업자료
[MySQL] MVCC(다중 버전 동시성 제어)와 데이터베이스가 트랜잭션을 지원하는 방법과 동작 과정
이번에는 데이터베이스가 트랜잭션을 지원하는 방법과 동작 과정에 대해 살펴보도록 하겠습니다. 아래의 내용은 RealMySQL과 MySQL 공식 문서 등을 참고하여 작성한 내용입니다. 1. MVCC(다중 버
mangkyu.tistory.com
함께보기
데드락 발생 원인
1. ORM 내 ID 생성을 위한 접속 시 Thread 부족
HikariCP Dead lock에서 벗어나기 (실전편) | 우아한형제들 기술블로그
1부 HikariCP Dead lock에서 벗어나기 (이론편)은 잘 보셨나요? 2부 HikariCP Dead lock에서 벗어나기 (실전편)에서는 실제 장애 사례를 기반으로 장애 원인을 설명하고 해결 사례를 공유하고자 합니다. 그
techblog.woowahan.com
데이터베이스 deadlock 해결 후기
안녕하세요, 휴먼스케이프에서 주로 서버 개발을 하고 있는 James입니다.
medium.com
Lock-based Concurrency Control
2PL 을 확장한 더 많은 방법론(Strict 2PL(S2PL), Rigorous 2PL(SS2PL))들 존재
2 Phase Locking (2PL)
q 2PL(2 Phase Locking) 정의 - 기본 로킹 규약의 문제를 해결하고 트...
blog.naver.com
'정리용 > DB' 카테고리의 다른 글
[DB 기초] 6. DB 설정 및 연결 (0) | 2025.03.19 |
---|---|
[DB 기초] 5. 인덱스 (0) | 2025.03.18 |
[DB 기초] 3. DB 동시성 제어(Concurrency Control) (0) | 2025.03.11 |
[DB 기초] 2. DB 확장 방법 (0) | 2025.03.11 |
[DB 기초] 1-2. 비관계형 데이터베이스(NoSQL) (0) | 2025.03.11 |
- Total
- Today
- Yesterday
- useState
- asac#asac7기
- git
- useCallback
- react
- useLayoutEffect
- asac7기
- memo
- ssh
- acas#acas7기
- useEffect
- acac
- useReducer
- useRef
- ASAC
- useMemo
- Nginx
- asac7
- useContext
- asac7#asac
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |