트랜잭션 로킹: Difference between revisions
From CS Wiki
No edit summary |
No edit summary |
||
Line 9: | Line 9: | ||
* '''로킹 단위가 작으면''' | * '''로킹 단위가 작으면''' | ||
** 병행성(동시성 수준)이 높아지지만 관리가 까다로움(로킹 오버헤드 증가) | ** 병행성(동시성 수준)이 높아지지만 관리가 까다로움(로킹 오버헤드 증가) | ||
{| class="wikitable" | |||
|- | |||
! 로킹 단위 !! 로크의 수 !! 병행 제어 !! 로킹 오버헤드 !! 병행성 수준 | |||
|- | |||
| 커짐 || 적어짐 || 단순해짐 || 감소 || 낮아짐 | |||
|- | |||
| 작아짐 || 많아짐 || 복잡해짐 || 증가 || 높아짐 | |||
|} | |||
== 로킹 범위 == | == 로킹 범위 == |
Revision as of 09:04, 5 October 2019
- 병행 제어를 위해 트랜잭션이 접근하고자 하는데이터를 잠그어 다른 트랜잭션이 접근하지 못하도록 하는 기법
- 트랜잭션이 어떤 데이터에 접근하고자 할 때 로킹 수행
- 로킹이 되어 있는 데이터에는 다른 트랜잭션이 접근할 수 없음
- 트랜잭션은 로킹이 된 데이터에 대해서만 연산 수행
- 로킹 단위: 필드, 레코드, 파일, 데이터베이스 모두 로킹 단위가 될 수 있음
- 로킹 단위가 크면
- 관리하기 용이(로킹 오버헤드 감소)하지만 병행성 수준(동시성 수준) 낮아짐
- 로킹 단위가 작으면
- 병행성(동시성 수준)이 높아지지만 관리가 까다로움(로킹 오버헤드 증가)
로킹 단위 | 로크의 수 | 병행 제어 | 로킹 오버헤드 | 병행성 수준 |
---|---|---|---|---|
커짐 | 적어짐 | 단순해짐 | 감소 | 낮아짐 |
작아짐 | 많아짐 | 복잡해짐 | 증가 | 높아짐 |
로킹 범위
- 로우
- 페이지
- 인그센드
- 테이블
- 데이터베이스
- 락 에스컬레이션
- 관리할 로킹 리소스에 따라 로킹 범위를 동적으로 변화시킴
로킹 문제점
- 블로킹(Blocking)
- 로킹으로 인해 특정 세션이 작업을 진행하지 못하는 상태
- 로킹 중인 트랜잭션이 commit 또는 rollback 됨으로써 해제
- 해결 방안: 잦은 블로킹으로 인한 호율 하락을 막기 위해 트랜잭션을 최대한 짧게 설계할 필요
- 교착상태(Deadlock)
- 두 세션이 각각 Lock을 설정한 리소스를 기다리고 있는 상태(블로킹이 해제되지 않음)
- DBMS가 임의로 한 세션을 kill 해야 해제 가능
2단계 로킹 규약
- 직렬가능성을 보장할 수 있는 가장 널리 사용되는 로킹 기법
- 교착상태 발생 가능성이 있음