공유 락(Shared Lock)은 데이터베이스 관리 시스템(DBMS)에서 사용되는 동시성 제어 메커니즘의 일부
여러 트랜잭션이 동시에 동일한 데이터 항목에 대한 읽기 액세스를 가질 수 있도록 허용
여러 트랜잭션이 동시에 데이터를 '읽을' 수 있도록 허용
데이터를 안전하게 읽을 수는 있지만, 변경할 수는 없다.
데이터의 일관성과 무결성을 유지
쓰기 작업 제한.
비독점적 잠금 : 하나의 데이터의 여러 트랜잭션이 동시 공유 락 획득 가능
읽기작업에 사용 : 읽기작업에 사용 다른 트랜잭션은 읽을수 있지만 수정 불가능
쓰기락과의 상호작용 : 공유 락이 걸린 항목에 쓰기락 요청시
모든 공유 락이 해제될 때까지 기다려야 함
데이터 동시 수정 방지 및 일관성 유지!
공유 락의 작동 방식
트랜잭션 시작: 트랜잭션이 데이터 항목을 읽으려 할 때, DBMS는 해당 항목에 대한 공유 락을 요청합니다.
락 부여: 해당 데이터 항목에 대해 다른 쓰기 락이 없는 경우, DBMS는 공유 락을 부여합니다.
데이터 읽기: 트랜잭션은 데이터를 읽습니다. 동시에 다른 트랜잭션도 같은 데이터에 대해 공유 락을 요청하고 읽을 수 있습니다.
락 해제: 트랜잭션이 완료되면, 공유 락이 해제됩니다. 모든 공유 락이 해제되어야만 다른 트랜잭션이 해당 데이터 항목에 대한 쓰기 락을 획득할 수 있습니다.
트랜잭션에서 읽기를 수행할때 실행
쓰기 수정 작업이 불가능하다하는대.
데이터베이스 객체에 대한 독점적인 수정 삭제 권한을 트랜잭션에 부여
공유 락은 행을 읽을 수 있게 하고, 독점 락은 행을 수정하거나 삭제할 수 있게 한다.
한 트랜잭션이 데이터에 대해 독점 락을 걸면, 해당 트랜잭션은 데이터를 '읽고 쓸(수정, 삭제 포함)' 수 있다.
데이터를 안전하게 변경하기 위해.
다른 트랜잭션은 해당 객체를 읽기, 쓰기, 삭제 제한
EX) 한 트랜잭션이 은행 계좌의 잔액 업데이트시 독점 락을 사용하여
동시에 같은 계좌를 쓰지 못하게한다. 동시성 제어 핵심
트랜잭션이 행에 공유 락을 가지고 있을 때, 다른 트랜잭션이 같은 행에 대해 공유 락을 요청할 수 있지만,
독점 락을 요청할 수 없다.
핵심은 ? 공유락은 서로 락요청 가능하지만 독점 락은 불가능
ex)
은행 계좌에서 이체 작업을 수행하는 경우를 생각해 보면 이체 작업을 수행하는 트랜잭션은 계좌 잔액을 업데이트하기 전에 해당 계좌에 대해 독점 락을 설정 이 독점 락은 다른 트랜잭션이 동시에 같은 계좌에 접근하여 변경을 시도하는 것을 방지
읽기 작업: 범위 락은 특정 범위 내의 데이터를 읽는 작업에서 다른 트랜잭션의 쓰기 작업을 방지합니다. 이를 통해, 데이터 읽기 작업이 진행되는 동안 데이터의 일관성을 보장할 수 있습니다.
쓰기 작업: 범위 락은 특정 범위 내에서 쓰기 작업을 수행하는 트랜잭션이 그 범위 내의 데이터에 대한 독점적인 접근 권한을 갖도록 합니다. 이는 다른 트랜잭션이 해당 범위의 데이터를 동시에 수정하지 못하게 함으로써, 데이터의 무결성을 유지합니다.
직렬화 가능 격리 수준에서 데이터베이스 테이블에 '가격' 필드가 있고, 한 트랜잭션이 가격이 100에서 200 사이인 모든 항목을 조회하고자 할 때, 이 범위에 대한 범위 락이 설정될 수 있습니다. 이 락이 설정되면, 다른 트랜잭션이 이 범위 내의 데이터를 변경하거나 새로운 데이터를 삽입하는 것이 제한됩니다. 이러한 방식으로 범위 락은 데이터베이스의 일관성과 무결성을 보호하는 데 기여합니다.
1 . https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html