존스노우·2024년 2월 7일
1

독서모임

목록 보기
4/9

공유 락(Shared Lock)

  • 공유 락(Shared Lock)은 데이터베이스 관리 시스템(DBMS)에서 사용되는 동시성 제어 메커니즘의 일부

  • 여러 트랜잭션이 동시에 동일한 데이터 항목에 대한 읽기 액세스를 가질 수 있도록 허용

  • 여러 트랜잭션이 동시에 데이터를 '읽을' 수 있도록 허용

  • 데이터를 안전하게 읽을 수는 있지만, 변경할 수는 없다.

  • 데이터의 일관성과 무결성을 유지

  • 쓰기 작업 제한.

비독점적 잠금

  • 비독점적 잠금 : 하나의 데이터의 여러 트랜잭션이 동시 공유 락 획득 가능

  • 읽기작업에 사용 : 읽기작업에 사용 다른 트랜잭션은 읽을수 있지만 수정 불가능

  • 쓰기락과의 상호작용 : 공유 락이 걸린 항목에 쓰기락 요청시

  • 모든 공유 락이 해제될 때까지 기다려야 함

  • 데이터 동시 수정 방지 및 일관성 유지!

작동 방식

  • 공유 락의 작동 방식
    트랜잭션 시작: 트랜잭션이 데이터 항목을 읽으려 할 때, DBMS는 해당 항목에 대한 공유 락을 요청합니다.

  • 락 부여: 해당 데이터 항목에 대해 다른 쓰기 락이 없는 경우, DBMS는 공유 락을 부여합니다.

  • 데이터 읽기: 트랜잭션은 데이터를 읽습니다. 동시에 다른 트랜잭션도 같은 데이터에 대해 공유 락을 요청하고 읽을 수 있습니다.

  • 락 해제: 트랜잭션이 완료되면, 공유 락이 해제됩니다. 모든 공유 락이 해제되어야만 다른 트랜잭션이 해당 데이터 항목에 대한 쓰기 락을 획득할 수 있습니다.

정리 및 어디에 사용?

  • 트랜잭션에서 읽기를 수행할때 실행

  • 쓰기 수정 작업이 불가능하다하는대.

Read Uncommitted

  • 공유락 사용하지 않음

Read Committed

  • 데이터를 읽는 순간에만 적용
  • 읽기가 완료되면 공유락이 해제 되어 데이터 변경이 가능

반복 가능한 읽기

  • 공유락 기본 설정

직렬화 가능 (Serializable)

  • 데이터를 읽을 때 마다 공유락 사용
  • 트랜잭션이 마치 순차적으로 실행되는 것 처럼 처리

독점 락(Exclusive Lock)

  • 데이터베이스 객체에 대한 독점적인 수정 삭제 권한을 트랜잭션에 부여

  • 공유 락은 행을 읽을 수 있게 하고, 독점 락은 행을 수정하거나 삭제할 수 있게 한다.

  • 한 트랜잭션이 데이터에 대해 독점 락을 걸면, 해당 트랜잭션은 데이터를 '읽고 쓸(수정, 삭제 포함)' 수 있다.

  • 데이터를 안전하게 변경하기 위해.

  • 다른 트랜잭션은 해당 객체를 읽기, 쓰기, 삭제 제한

  • EX) 한 트랜잭션이 은행 계좌의 잔액 업데이트시 독점 락을 사용하여

  • 동시에 같은 계좌를 쓰지 못하게한다. 동시성 제어 핵심

  • 트랜잭션이 행에 공유 락을 가지고 있을 때, 다른 트랜잭션이 같은 행에 대해 공유 락을 요청할 수 있지만,

  • 독점 락을 요청할 수 없다.

  • 핵심은 ? 공유락은 서로 락요청 가능하지만 독점 락은 불가능

사용

Read Uncommitted

  • 독점 락이 데이터를 변경하는 트랜잭션에 의해 설정
  • 다른 트랜잭션은 독점 락이 걸린 데이터를 읽을 수 있으며(더티 리드), 이는 데이터의 일관성이 보장되지 않음을 의미

Read Committed

  • 트랜잭션이 데이터를 변경하기 전에 독점 락을 걸어, 변경 작업이 완료될 때까지 다른 트랜잭션이 해당 데이터를 읽거나 변경하지 못하게 함

Repeatable Read

  • 독점 락은 데이터를 변경하려는 트랜잭션에 의해 사용됩니다.
  • 한 트랜잭션이 읽기 작업을 반복할 경우 동일한 결과를 보장
  • 다른 트랜잭션은 독점 락이 해제될 때까지 데이터를 변경 없다.

Serialzable

  • 가장 엄격한 격리 수준에서는 독점 락과 범위 락이 함께 사용
  • 독점 락은 데이터 변경을 위해 필수적
  • ex)

  • 은행 계좌에서 이체 작업을 수행하는 경우를 생각해 보면 이체 작업을 수행하는 트랜잭션은 계좌 잔액을 업데이트하기 전에 해당 계좌에 대해 독점 락을 설정 이 독점 락은 다른 트랜잭션이 동시에 같은 계좌에 접근하여 변경을 시도하는 것을 방지

범위락?

  • 특정 범위의 데이터 대한 접근을 제어.
  • 주로 직렬화 격리 수준에서 데이터 일관성을 위해 사용
  • 특정 키 값의 범위에 대한 설정
  • 해당 범위는 읽기 또는 쓰기 작업을 독점 제어

범위 락의 작동 방식

읽기 작업: 범위 락은 특정 범위 내의 데이터를 읽는 작업에서 다른 트랜잭션의 쓰기 작업을 방지합니다. 이를 통해, 데이터 읽기 작업이 진행되는 동안 데이터의 일관성을 보장할 수 있습니다.

쓰기 작업: 범위 락은 특정 범위 내에서 쓰기 작업을 수행하는 트랜잭션이 그 범위 내의 데이터에 대한 독점적인 접근 권한을 갖도록 합니다. 이는 다른 트랜잭션이 해당 범위의 데이터를 동시에 수정하지 못하게 함으로써, 데이터의 무결성을 유지합니다.

  • 이런식으로 설명 됨.

범위 락의 예

직렬화 가능 격리 수준에서 데이터베이스 테이블에 '가격' 필드가 있고, 한 트랜잭션이 가격이 100에서 200 사이인 모든 항목을 조회하고자 할 때, 이 범위에 대한 범위 락이 설정될 수 있습니다. 이 락이 설정되면, 다른 트랜잭션이 이 범위 내의 데이터를 변경하거나 새로운 데이터를 삽입하는 것이 제한됩니다. 이러한 방식으로 범위 락은 데이터베이스의 일관성과 무결성을 보호하는 데 기여합니다.

  • 출처

1 . https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html

  1. https://help.sap.com/doc/saphelp_maxdb78/7.8/en-US/44/c35da3864960f0e10000000a155369/content.htm?no_cache=true
profile
어제의 나보다 한걸음 더

0개의 댓글