DB Lock

Lys·2023년 12월 1일
0

데이터베이스

목록 보기
15/18

Lock

Lock란 트랜잭션 처리의 순차성을 보장하기 위한 방법으로 여러 사용자들이 같은 데이터를 동시에 접근하는 상황에서 데이터의 무결성과 일관성을 지키기 위해 사용한다.

Lock설정 범위

  • 데이터베이스
    :1개의 세션만이 DB에 접근 가능하도록 하는 것으로 데이터베이스 기준으로 Lock를 하는 것을 말한다. DB의 소프트웨어 버전을 올리는 경우 등에 사용하지만 일반적으로는 잘 사용하지 않는다.
  • 파일
    : row등과 같은 실제 데이터가 쓰여지는 물리적인 저장소인 데이터베이스 파일을 기준으로 Lock를 사용하지만 해당 범위의 Lock는 잘 사용하지 않는다.
  • 테이블
    : 테이블 기준으로 Lock을 설정하며, 테이블의 모든 행을 업데이트 하는 등 전체 테이블에 영향을 주는 행위를 수행할 때 유용하다. DDL 구문과 함께 사용되며 DDL Lock 라고도 한다.
  • 페이지와 블록
    : 파일의 일부인 페이지와 블록을 기준으로 Lock을 사용하지만, 현재 잘 사용되지는 않는다.
  • 컬럼
    : 컬럼을 기준으로 Lock를 사용하지만 지원하는 DBMS가 많지 않고 설정 및 해제 리소스가 많이 들기 때문에 잘 사용되지 않는다.
  • 행(Row)를 기준으로 Lock을 설정하며, DML에 대한 Lock으로 가장 일반적으로 사용되는 Lock이다.

Lock의 종류

  • 공유락(Shared Lock)
    • 데이터를 변경하지 않는 읽기 명령어에 대해 주어지는 Lock으로 Read Lock라고도 불린다.
    • Shared의 앞글자를 따서 S라고 표기한다.
    • 여러 사용자가 동시에 데이터를 읽어도 일관성에는 영향을 끼치지 않기 때문에 공유락끼리는 동시에 접근이 가능하다.
  • 베타락(Exclusive Lock)
    • 데이터에 변경을 가하는 쓰기 명령어들에 대해 주어지는 락으로 Write Lock라고도 불리며 X라고 표기한다.
    • 다른 세션이 해당 자원에 접근하는 것을 막는다.
      (ex.Select,Insert,Update등)
    • 멀티 쓰레딩 환경에서 임계영역을 안전하기 관리하기 위해 활용되는 뮤텍스와 유사하다.
    • 트랜잭션 동안 유지된다.
  • 업데이트락(Update Lock)
    • 데이터를 수정하기 위해 베타락 을 걸기전 데드락을 방지하기 위해 사용된다.
    • 일반적으로 업데이트 락은 Update 쿼리의 Where 조건이 실행 되는 과정에서 적용된다.
  • 내재 락(Intent Lock)
    • 사용자가 요청한 범위에 대한 락을 걸 수 있는지 파악하기 위해 사용된다.
    • 사용자 A가 테이블 하나의 로우에 대해 베타락을 건 경우, 사용자 B가 테이블 전체에 대한 락을 걸기 위해서는 A의 트랜잭션이 끝날 때 까지 기다려야 된다.
      하지만 B가 테이블에 락(DDL Lock)을 걸 수 있는지 파악하기 위해 모든 로우와 관련 된 락을 찾아보는 건 비효울 적이기 때문에 A가 로우에 베타락을 거는 시점에 해당 로우에 상위 객체들(Ex.테이블,페이지)에 대해 내재락을 걸어 다른 사용자가 더 큰 범웨의 자원들에 대해 락을 걸 수 있는지 파악할 수 있다.

🙇‍ 참고 사이트 🙇‍

https://sewonzzang.tistory.com/76
https://velog.io/@koo8624/Database-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%9D%BDLock%EC%9D%98-%EC%A2%85%EB%A5%98%EC%99%80-%EC%97%AD%ED%95%A0

0개의 댓글

관련 채용 정보