상세 컨텐츠

본문 제목

[데이터베이스 CS지식] 락(Look) 동시성과 무결성의 수호자

데이터베이스

by 소란한소란 2024. 2. 19. 13:15

본문

728x90

데이터베이스 락: 동시성과 무결성의 수호자

안녕하세요! 오늘은 데이터베이스 락에 대해 알아보겠습니다. 데이터베이스 락은 다수의 사용자 및 트랜잭션이 동시에 데이터에 접근할 때 발생할 수 있는 동시성 문제를 해결하기 위해 사용되는 메커니즘입니다. 이를 통해 데이터의 일관성을 보장하고 무결성을 유지할 수 있습니다.


락을 하기 위해 트랜잭션 예시

두 명의 사용자가 현재 가지고 있는 돈을 바꾸려고 함.

 

먼저 세션 (1)이 500원으로 바꾸는 트랜잭션을 시작 -> 세션 (1) 락 획득

 

세션 (1)이 가지고 있는 락이 반납될때 까지 대기

 

세션 (1)이 커밋과 동시에 락 반납 -> 세션 (2) 락 획득

 

세션 (2) 커밋과 동시에 락 반납 완료

 


락의 두 가지 주요 유형

1. 공유 락(Shared Lock)

공유 락은 여러 트랜잭션이 동시에 데이터를 읽을 수 있도록 허용하는 메커니즘입니다. 여러 트랜잭션이 읽는 동안에는 데이터에 대한 쓰기 작업이 차단되어 일관성을 유지합니다. 공유 락은 데이터 읽기 작업을 동시에 허용함으로써 효율적인 동시성을 제공합니다.

 

2. 배타 락(Exclusive Lock)

배타 락은 특정 트랜잭션이 데이터를 읽고 쓸 때, 다른 트랜잭션이 동시에 해당 데이터에 접근하지 못하도록 차단하는 메커니즘입니다. 배타 락이 설정된 데이터에 대해 다른 트랜잭션이 읽기 또는 쓰기 작업을 수행할 수 없습니다. 이는 데이터의 무결성을 보장하면서 동시성 문제를 방지합니다.


락의 효율적인 관리

락은 데이터베이스 시스템에서 자동으로 관리되며, 트랜잭션의 시작과 종료 시에 락을 설정하고 해제합니다. 효율적인 락 관리는 데이터베이스의 성능과 무결성을 유지하는 데 중요합니다. 그러나 잘못된 락 사용은 데드락과 같은 문제를 초래할 수 있으므로 주의가 필요합니다.


 

락 설정 범위

 

락 설정의 범위는 특정 데이터나 테이블에 대한 락을 설정할 수 있습니다. 이는 데이터베이스 시스템의 종류에 따라 다를 수 있으며, 정확한 범위 설정이 데이터의 일관성과 효율적인 동시성을 유지하는 데에 중요한 역할을 합니다.

데드락 (교착상태)

데드락은 두 개 이상의 트랜잭션이 서로가 소유한 락을 대기하면서 상호적으로 차단되는 상황을 나타냅니다. 이는 프로그래밍 에러 또는 잘못된 락 사용에 기인할 수 있습니다. 데드락을 피하기 위해서는 락의 순서를 지키거나, 트랜잭션 시간을 제한하는 등의 전략이 필요합니다.

 

교착상태 예시

 

블로킹

블로킹은 특정 트랜잭션이 락을 획득하지 못해 기다리는 상태를 의미합니다. 블로킹은 데이터베이스에서 여러 트랜잭션이 서로 영향을 주지 않도록 하는 데 중요한 역할을 합니다. 그러나 지나치게 긴 블로킹은 전체 시스템 성능에 영향을 미칠 수 있으므로 조심스럽게 관리해야 합니다.

 

블로킹 예시

 


데이터베이스 락은 동시성과 무결성을 보장하여 다수의 사용자 및 트랜잭션이 안전하게 데이터에 접근할 수 있도록 도와줍니다. 공유 락과 배타 락은 각각 읽기와 쓰기 작업에 특화되어 있어 데이터베이스 시스템에서 효과적으로 활용됩니다. 락 설정의 범위와 데드락에 대한 이해는 안정적이고 성능 향상된 데이터베이스 운영을 위한 중요한 지식입니다.

 

728x90

관련글 더보기