데이터베이스 로킹
- 데이터베이스 병행제어를 위해 트랜잭션이 접근하고자 하는데이터를 잠그어 다른 트랜잭션이 접근하지 못하도록 하는 기법
- 트랜잭션이 어떤 데이터에 접근하고자 할 때 로킹 수행
- 로킹이 되어 있는 데이터에는 다른 트랜잭션이 접근할 수 없음
- 트랜잭션은 로킹이 된 데이터에 대해서만 연산 수행
- 로킹 단위:
로킹 단위 |
로크의 수 |
병행 제어 |
로킹 오버헤드 |
병행성 수준
|
커짐 |
적어짐 |
단순해짐 |
감소 |
낮아짐
|
작아짐 |
많아짐 |
복잡해짐 |
증가 |
높아짐
|
로킹 단위
- 필드, 레코드, 테이블, 파일, 데이터베이스 모두 로킹 단위가 될 수 있음
- 락 에스컬레이션
- 관리할 로킹 리소스에 따라 로킹 범위를 동적으로 변화시킴
전용 로크와 공용 로크
- 전용 로크(Exclusive Lock)
- 트랜잭션 T1이 데이터에 전용 로크를 설정하면, T1만 읽기, 쓰기 가능
- 공용 로크(Shared Lock)
- 트랜잭션 T1이 데이터에 공용 로크를 설정하면, T1은 읽기만 가능, 쓰기는 불가능
- T1이 로크를 걸어 둔 상태에서도 T2가 공용 로크 설정 가능
- 즉 여러 트랜잭션에서 동시에 읽기 가능, 쓰기 불가
로킹 문제점
- 블로킹(Blocking)
- 로킹으로 인해 특정 세션이 작업을 진행하지 못하는 상태
- 로킹 중인 트랜잭션이 commit 또는 rollback 됨으로써 해제
- 해결 방안: 잦은 블로킹으로 인한 효율 하락을 막기 위해 트랜잭션을 최대한 짧게 설계할 필요
- 교착상태(Deadlock)
- 두 세션이 각각 Lock을 설정한 리소스를 기다리고 있는 상태(블로킹이 해제되지 않음)
- DBMS가 임의로 한 세션을 kill 해야 해제 가능
- 직렬가능성을 보장할 수 있는 가장 널리 사용되는 로킹 기법
같이 보기
출처: IT위키(IT위키에서 최신 문서 보기)
* 본 페이지는 공대위키에서 미러링된 페이지입니다. 일부 오류나 표현의 누락이 있을 수 있습니다. 원본 문서는 공대위키에서 확인하세요!