Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- groupby
- 카카오코테
- doitandroid
- Til
- 코테
- SQL
- Kotlin
- 자바
- 오블완
- java
- 혼공챌린지
- 기술면접
- Android
- 정처기
- 자료구조
- CS
- 스터디
- MySQL
- 혼공파
- 혼공단
- 인프런
- join
- 프로그래머스
- 코틀린
- 정보처리기사
- 알고리즘
- 안드로이드스튜디오
- 안드로이드
- 티스토리챌린지
- select
Archives
- Today
- Total
Welcome! Everything is fine.
[CS 발표_05] 데이터베이스에서 락이란? 본문
728x90
데이터베이스의 락에 대해 설명해보세요.
락(lock)이란?
동시성 제어를 위해 락(lock)을 사용한다!
락(lock) : 트랜잭션이 처리되는 순서를 보장하기 위한 방법. 데이터 베이스의 무결성을 유지하는데 목적이 있다. 트랜잭션이 동시에 수행될 때, 일관성을 해치지 않도록 데이터의 접근을 제어하는 DBMS의 기능이다. 운영체제에서의 데이터 동기화를 위해 임계 영역에 대한 접근을 제한하는 상호배제 기법과 유사하다.
락(lock)의 종류
- 낙관적 잠금 : 데이터 갱신 시 경합이 발생하지 않을 것이라고 보는 것. 동시 업데이트가 거의 없는 경우 사용한다.
- 비관적 잠금 : 동일한 데이터를 동시에 수정할 가능성이 높다고 보는 것. 동시 업데이트가 빈번한 경우, 외부 시스템과 연동한 경우 사용한다.
- 공유 락
- 베타 락
공유 락(shared lock)과 베타 락(exclusive lock)
- 공유 락 : 데이터를 읽는 락. 데이터를 읽는 연산이므로 데이터의 일관성에 영향을 주지 않아 데이터에 여러 공유 락이 동시에 접근 가능.
- 데이터에 대한 사용권을 여러 트랜잭션이 함께 가질 수 있다.
- 베타 락 : 데이터를 수정하는 락. 데이터의 일관성을 유지하기 위해 데이터에 하나의 베타 락이 접근 중일 때 다른 베타 락이 접근할 수 없다.
- 베타 락 연산을 실행한 트랜잭션만 해당 데이터에 대한 독점권을 가진다.
정리하자면, 공유 락은 다른 공유 락과 양립할 수 있지만 베타 락은 다른 락과 양립할 수 없다!
블로킹과 데드락
블로킹(blocking) : lock들의 경합이 발생하여 특정 세션이 작업을 진행하지 못하고 멈춘 상태. 블로킹을 해소하기 위해서는 이전 트 랜잭션이 완료(커밋 or 롤백)되어야 함.
- 트랜잭션을 짧게 정의하기
- 설계 시 같은 데이터를 갱신하는 트랜잭션이 동시 수행되지 않도록 하기
- 트랜잭션 격리성 수준을 불필요하게 상향 조정X
- LOCK TIMEOUT을 이용하여 잠금해제 시간을 조절
데드락(deadlock) : 한 트랜잭션이 자신이 처리 중인 데이터에 대해 락을 가진 상태에서 다른 트랜잭션이 처리 중인 데이터에 대해 락을 요청해 무한 대기 상태에 빠진 현상.
- 접근 순서를 동일하게 하기
- 트랜잭션 처리 속도 최소화하기
- LOCK TIMEOUT을 이용하여 잠금해제 시간을 조절
정리
락은 트랜잭션이 처리되는 순서를 보장해 무결성을 유지하는 방법이다. 락에는 공유 락과 베타 락이 있다. 공유 락은 데이터를 읽기 위한 락으로, 데이터가 변경되지 않는다. 따라서 특정 트랜잭션을 수행 중일 때 공유락을 가진 다른 트랜잭션이 동시에 접근할 수 있다. 반면에 베타 락은 데이터를 수정하는 락으로, 하나의 트랜잭션을 수행 중일 때 다른 트랜잭션이 접근할 수 없다. 락을 이용할 때는 트랜잭션이 블로킹이나 교착 상태에 빠질 수 있다는 문제점이 있다.
'CS 스터디 > 발표' 카테고리의 다른 글
[CS 발표_07] 완전 이진 트리, 포화 이진 트리, 이진 탐색 트리란? (0) | 2024.06.04 |
---|---|
[CS 발표_06] 인덱스란? (0) | 2024.05.31 |
[CS 발표_04] UDP의 특징과 UDP에서의 오류 검출 방법 (0) | 2024.05.27 |
[CS 발표_03] HTTP Keep Alive vs TCP Keep Alive (0) | 2024.05.27 |
[CS 발표_02] OS의 메모리 관리 전략(페이징 & 세그멘테이션) (0) | 2024.05.09 |