ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Oracle] Lock에 대한 정리
    개발/데이터베이스 2022. 1. 10. 00:11

    Lock이란

    트랜잭션 처리의 순차성을 보장하기 위한 방법입니다.
    DBMS마다 Lock을 구현하는 방식과 세부적인 방법이 다르기 때문에 사용하는 DB의 Lock에 대한 이해가 필요합니다.

     

    Lock의 특징

    • 다중 세션에서 동일한 데이터를 동시에 변경하는 것을 방지합니다.
    • 세션이 데이터를 수정할 수 있도록 하려면 먼저 수정하고 있는 데이터를 lock 해야한다.
    • 주어진 명령문을 통해 가능한 가장 낮은 레벨에서 자동으로 획득됩니다.
    • escalate하지 않는다.
    • 수동 및 자동 Lock을 모두 지원한다.

     

    Lock 충돌 유발 원인

    • 커밋되지 않은 변경 사항
    • 장기 실행 트랜잭션
    • 필요 이상으로 높은 Lock 레벨

     

    Lock 충돌 해결

    • lock을 보유하는 세션을 커밋 또는 롤백한다.
    • lock을 보유하는 세션을 종료한다.(응급 상황)

     

    Lock의 메커니즘

    • 높은 레벨의 데이터 동시성:
      - 삽입, 갱신 및 삭제에 대한 행 레벨 Lock
      - Query 에 lock이 필요 없음
    • 자동 큐 관리
    • 트랜잭션이 종료될 때까지 Lock 보유(커밋 또는 롤백 작업 사용)

     

    Lock 모드의 종류

    • ROW SHARE : Lock된 테이블에 대한 동시 액세스를 허용하지만 세션이 배타적 액세스를 위해 전체 테이블을 lock 하는 것은 금지한다.
    • ROW EXCLUSIVE : ROW SHARE와 동일하지만 SHARE 모드에서도 lock하는 것을 금지한다.
      ROW EXCLUSIVE lock은 데이터 갱신, 삽입 또는 삭제시 자동으로 획득된다. 그리고 사용하게 되면 여러 번 읽을 수 있고 한 번 쓸 수 있다.
    • SHARE : 동시 query는 허용하지만 Lock된 테이블에 대한 갱신은 금지한다.
      테이블에서 인덱스를 생성하려면 SHARE Lock이 필요하며 자동으로 요청된다. 그러나 온라인 인덱스를 생성하려면 인덱스를 작성할 때 ROW SHARE Lock을 사용해야 한다.
    • SHARE ROW EXCLUSIVE : 전체 테이블을 Query하는 데 사용되며 다른 유저가 테이블의 행을 Query하는 것은 허용하지만 해당 테이블을 SHARE 모드에서 lock하거나 행을 갱신하는 것은 금지한다.
    • EXCLUSIVE : lock된 테이블에서의 query는 허용하지만 해당 테이블에서의 다른 작업은 금지한다. 테이블을 삭제하려면 EXCLUSIVE lock이 필요하다.

     

    Enqueue 메커니즘

    Enqueue 메커니즘을 통해 다음을 추적할 수 있다.

    • lock을 대기하는 세션
    • 요청된 lock 모드
    • 세션에서 lock을 요청하는 순서

    Lock을 보유하는 트랜잭션이 완료되면 대기 중인 다음 세션이 Lock을 보유하게 된다.

     

     

    '개발 > 데이터베이스' 카테고리의 다른 글

    [Oracle] Select 튜닝 순서  (0) 2022.01.24
    [Oracle] RMAN  (0) 2022.01.17
    [Oracle] Undo(언두)란  (0) 2022.01.03
    [데이터베이스] 집합연산자 정리  (0) 2021.12.16
    [데이터베이스] 시퀀스 정리  (1) 2021.12.05

    댓글

Designed by Tistory.