트랜잭션 로킹 편집하기
IT위키
편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
[[분류:데이터베이스]] | |||
;병행 제어를 위해 트랜잭션이 접근하고자 하는데이터를 잠그어 다른 트랜잭션이 접근하지 못하도록 하는 기법 | |||
* 트랜잭션이 어떤 데이터에 접근하고자 할 때 로킹 수행 | |||
* 로킹이 되어 있는 데이터에는 다른 트랜잭션이 접근할 수 없음 | |||
* 트랜잭션은 로킹이 된 데이터에 대해서만 연산 수행 | |||
* 로킹 단위: | |||
{| class="wikitable" | |||
|- | |||
! 로킹 단위 !! 로크의 수 !! 병행 제어 !! 로킹 오버헤드 !! 병행성 수준 | |||
|- | |||
| 커짐 || 적어짐 || 단순해짐 || 감소 || 낮아짐 | |||
|- | |||
| 작아짐 || 많아짐 || 복잡해짐 || 증가 || 높아짐 | |||
|} | |||
== 로킹 단위 == | |||
* 필드, 레코드, 테이블, 파일, 데이터베이스 모두 로킹 단위가 될 수 있음 | |||
* '''락 에스컬레이션''' | |||
** 관리할 로킹 리소스에 따라 로킹 범위를 동적으로 변화시킴 | |||
== 전용 로크와 공용 로크 == | |||
* '''전용 로크(Exclusive Lock)''' | |||
** 트랜잭션 T1이 데이터에 전용 로크를 설정하면, T1만 읽기, 쓰기 가능 | |||
* '''공용 로크(Shared Lock)''' | |||
** 트랜잭션 T1이 데이터에 공용 로크를 설정하면, T1은 읽기만 가능, 쓰기는 불가능 | |||
** T1이 로크를 걸어 둔 상태에서도 T2가 공용 로크 설정 가능 | |||
** 즉 여러 트랜잭션에서 동시에 읽기 가능, 쓰기 불가 | |||
== 로킹 문제점 == | |||
* '''블로킹(Blocking)''' | |||
** 로킹으로 인해 특정 세션이 작업을 진행하지 못하는 상태 | |||
** 로킹 중인 트랜잭션이 commit 또는 rollback 됨으로써 해제 | |||
** '''해결 방안:''' 잦은 블로킹으로 인한 호율 하락을 막기 위해 트랜잭션을 최대한 짧게 설계할 필요 | |||
* '''[[교착상태|교착상태(Deadlock)]]''' | |||
** 두 세션이 각각 Lock을 설정한 리소스를 기다리고 있는 상태(블로킹이 해제되지 않음) | |||
** DBMS가 임의로 한 세션을 kill 해야 해제 가능 | |||
== [[2단계 로킹 규약]] == | |||
;직렬가능성을 보장할 수 있는 가장 널리 사용되는 로킹 기법 | |||
* 교착상태 발생 가능성이 있음 |