일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DB
- Stack
- sql
- spring
- dbms
- BFS
- 자바의정석
- 알고리즘
- cloud computing
- data structure
- 코딩테스트
- generic class
- dfs
- javascript
- jsp
- 클라우드 컴퓨팅
- JDBC
- JPA
- 암호학
- python
- Java
- MVC
- Queue
- Algorithm
- 코테
- 공개키 암호화
- 가상컴퓨팅
- 생성자
- 자료구조
- 크루스칼
- Today
- Total
PLOD
[DB]Concurrency Control 본문
병행 제어에 앞서, 먼저 병행에 대해서 알아보자.
병행(Concurrency)은 매우 빠르게 여러 트랜잭션 사이를 이동하면서 조금씩 처리를 수행하는 방식이다.
따라서 실제로는 한 번에 한 트랜잭션만 수행하지만, 마치 동시에 여러 트랜잭션을 수행하는 것처럼 보이도록 하는 것이다.
병행 제어(Concurrency Control)는 이렇게 트랜잭션이 병행 수행될 때 트랜잭션이 데이터베이스의 일관성을 파괴하지 않고, 다른 트랜잭션에 영향을 주지 않도록 트랜잭션 간의 상호작용을 제어하는 것을 말한다.
병행 제어의 목적은 다음과 같다.
- 데이터베이스의 일관성 유지(consistency)
- 데이터베이스 공유 최대화
- 시스템 활용도 최대화
- 사용자 응답 시간 최소화(Minimize response time)
- 단위 시간당 트랜잭션 처리 건수 최대화
* Lock-Based Protocols
Lock(ing)은 트랜잭션이 접근하려는 데이터를 다른 트랜잭션이 접근하지 못하도록 잠그는(lock) 병행 제어 기법이다. lock에는 exclusive-lock과 shared-lock 이 있다. lock을 사용함으로써 여러 곳에서 동시다발적으로 들어오는 data transaction 명령을 실행 할 수 있다. 잠금을 허용할 수 없는 경우, 먼저 선점한 lock이 풀어줄 때 까지 기다린다.
로킹 단위가 클수록 병행 제어가 단순해지고 관리하기가 편하지만 병행성 수준이 낮아진다.
반면 로킹 단위가 작을수록 병행 제어가 복잡해지고 오버헤드가 증가하지만, 병행성 수준이 높아지고 데이터베이스 공유도가 높아진다.
* Lock의 종류
- S Lock(Shared-Lock) : 공유 잠금(Shared Lock) 데이터를 읽어올 때 주로 걸리는 lock
- X Lock(eXclusive-Lock) : 단독 잠금(Exclusive Lock) 데이터를 입력/수정/삭제 할 때 걸리는 lock
*DeadLock(교착상태)
교착 상태란, 여러 트랜잭션이 특정 데이터에 lock을 한 채 다른 트랜잭션이 lock을 수행한 데이터에 접근하려고 할 때 실행을 하지 못하고 서로 무한정 기다리는 상태를 말한다.
DeadLock이 일어나게 되면 시스템은 rollback 을 실행하여 transaction 이전 상태로 되돌린다. DeadLock을 피하기 위해 Lock을 사용하지 않으면 DBMS가 inconsistance 해진다. 그렇기 때문에 DeadLock은 필연적이다. DeadLock이 생길시 rollback을 사용하면 된다.
*기아 상태(Starvation)
특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태를 말함.
* 트랜잭션 격리 종류
1) Read Uncommitted
Dirty Read를 허용함 (Dirty Read란 commit 되지 않은 데이터 변경을 읽을 수 있다는 것이다)
Read Uncommitted는 S Lock조차 걸지 않기 때문에 다른 세션에서 커밋되지 않은 데이터를 볼 수 있다.
2) Read Committed
Dirty Read를 허용하지 않음 T1 수행 중간에 T2가 수행되지 않음
Non repeatable read가 발생할 수 있음
동일한 select 문인데 서로 다른 결과가 발생함
실제 select할 때 S Lock을 소유한다. 하지만 select가 끝나 동시에 S Lock을 해제 한다. 이 말은 트랜잭션 내에서 select가 끝나더라도 다른 세션에서 insert나 update가 가능하다는 말이다.
3) Repeatable Read
Dirty Read를 허용하지 않고 반복읽기를 보장한다. 이미 읽은 데이터는 다시 읽어도 동일한 값이 되도록 보장하는 것이다.
=> Phantom Read 발생 가능
참고 )
[데이터베이스] 트랜잭션에 대해서 (tistory.com)
'개발 공부 > Database' 카테고리의 다른 글
[SQL] GROUP 함수 (0) | 2023.02.13 |
---|---|
[SQL] SQL 함수 (0) | 2023.02.05 |
[DB]Transaction (0) | 2022.12.11 |
[DB] Query Optimization (0) | 2022.12.11 |
[DB] Query Processing + query cost (0) | 2022.10.30 |