트랜잭션 로킹: 두 판 사이의 차이

IT위키
편집 요약 없음
편집 요약 없음
4번째 줄: 4번째 줄:
* 로킹이 되어 있는 데이터에는 다른 트랜잭션이 접근할 수 없음
* 로킹이 되어 있는 데이터에는 다른 트랜잭션이 접근할 수 없음
* 트랜잭션은 로킹이 된 데이터에 대해서만 연산 수행
* 트랜잭션은 로킹이 된 데이터에 대해서만 연산 수행
* 로킹 단위: 필드, 레코드, 파일, 데이터베이스 모두 로킹 단위가 될 수 있음
* 로킹 단위:  
* '''로킹 단위가 크면'''
** 관리하기 용이(로킹 오버헤드 감소)하지만 병행성 수준(동시성 수준) 낮아짐
* '''로킹 단위가 작으면'''
** 병행성(동시성 수준)이 높아지지만 관리가 까다로움(로킹 오버헤드 증가)
{| class="wikitable"
{| class="wikitable"
|-
|-
18번째 줄: 14번째 줄:
|}
|}


== 로킹 범위 ==
== 로킹 단위 ==
* 로우
* 필드, 레코드, 테이블, 파일, 데이터베이스 모두 로킹 단위가 될 수 있음
* 페이지
* '''락 에스컬레이션'''
* 인그센드
* 테이블
* 데이터베이스
* 락 에스컬레이션
** 관리할 로킹 리소스에 따라 로킹 범위를 동적으로 변화시킴
** 관리할 로킹 리소스에 따라 로킹 범위를 동적으로 변화시킴
== 전용 로크와 공용 로크 ==
* '''전용 로크(Exclusive Lock)'''
** 트랜잭션 T1이 데이터에 전용 로크를 설정하면, T1만 읽기, 쓰기 가능
* '''공용 로크(Shared Lock)'''
** 트랜잭션 T1이 데이터에 공용 로크를 설정하면, T1은 읽기만 가능, 쓰기는 불가능
** T1이 로크를 걸어 둔 상태에서도 T2가 공용 로크 설정 가능
** 즉 여러 트랜잭션에서 동시에 읽기 가능, 쓰기 불가


== 로킹 문제점 ==
== 로킹 문제점 ==

2019년 10월 5일 (토) 23:12 판

병행 제어를 위해 트랜잭션이 접근하고자 하는데이터를 잠그어 다른 트랜잭션이 접근하지 못하도록 하는 기법
  • 트랜잭션이 어떤 데이터에 접근하고자 할 때 로킹 수행
  • 로킹이 되어 있는 데이터에는 다른 트랜잭션이 접근할 수 없음
  • 트랜잭션은 로킹이 된 데이터에 대해서만 연산 수행
  • 로킹 단위:
로킹 단위 로크의 수 병행 제어 로킹 오버헤드 병행성 수준
커짐 적어짐 단순해짐 감소 낮아짐
작아짐 많아짐 복잡해짐 증가 높아짐

로킹 단위

  • 필드, 레코드, 테이블, 파일, 데이터베이스 모두 로킹 단위가 될 수 있음
  • 락 에스컬레이션
    • 관리할 로킹 리소스에 따라 로킹 범위를 동적으로 변화시킴

전용 로크와 공용 로크

  • 전용 로크(Exclusive Lock)
    • 트랜잭션 T1이 데이터에 전용 로크를 설정하면, T1만 읽기, 쓰기 가능
  • 공용 로크(Shared Lock)
    • 트랜잭션 T1이 데이터에 공용 로크를 설정하면, T1은 읽기만 가능, 쓰기는 불가능
    • T1이 로크를 걸어 둔 상태에서도 T2가 공용 로크 설정 가능
    • 즉 여러 트랜잭션에서 동시에 읽기 가능, 쓰기 불가

로킹 문제점

  • 블로킹(Blocking)
    • 로킹으로 인해 특정 세션이 작업을 진행하지 못하는 상태
    • 로킹 중인 트랜잭션이 commit 또는 rollback 됨으로써 해제
    • 해결 방안: 잦은 블로킹으로 인한 호율 하락을 막기 위해 트랜잭션을 최대한 짧게 설계할 필요
  • 교착상태(Deadlock)
    • 두 세션이 각각 Lock을 설정한 리소스를 기다리고 있는 상태(블로킹이 해제되지 않음)
    • DBMS가 임의로 한 세션을 kill 해야 해제 가능

2단계 로킹 규약

직렬가능성을 보장할 수 있는 가장 널리 사용되는 로킹 기법
  • 교착상태 발생 가능성이 있음