db
-
낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)DB 2024. 11. 14. 20:51
1. 낙관적 락(OPtimistic Lock)낙관적 락은 충돌이 잘 발생하지 않는다고 가정하고 자원을 제어하는 방식이다. 자원을 사용하는 동안 락을 거는 대신, 작업을 끝내기 직전에 충돌이 발생했는지 검사한다. 낙관적 락은 다음과 같은 과정으로 동작한다.자원을 사용할 때 락을 걸지 않고, 다른 프로세스도 동시에 접근할 수 있도록 허용한다.자원 사용이 완료되면, 그 동안 자원이 변경되지 않았는지 확인한다.만약 다른 프로세스가 자원을 변경한 것이 확인되면, 작업을 취소하고 다시 시도한다.이 방식은 자원을 사용하는 동안 락이 걸리지 않기 때문에 성능이 높으며, 충돌이 거의 발생하지 않는 환경에서 효과적이다. 하지만 충돌이 빈번하다면 작업을 반복해야 할 수 있어 비효율적이다. 2. 비관적 락 (Pessimist..
-
DB - 블로킹(Blocking)과 데드 락(Deadlock)DB 2024. 11. 11. 22:27
블로킹(Blocking)정의:한 트랜잭션이 자원(테이블, 행 등)을 Lock 하고 있을 때, 다른 트랜잭션이 해당 자원에 접근하지 못하고 기다리는 현상특징:일시적인 현상으로, Lock 이 해제되면 자연스럽게 해결됨정상적인 데이터베이스 동작의 일부데이터 일관성을 보장하기 위한 매커니즘예시 코드)-- 블로킹 예시-- 트랜잭션 1BEGIN;UPDATE accounts SET balance = balance - 100 WHERE id = 1;-- 여기서 잠시 멈춤 (아직 COMMIT하지 않음)-- 트랜잭션 2 (동시 실행)BEGIN;UPDATE accounts SET balance = balance + 50 WHERE id = 1; -- 트랜잭션 1이 COMMIT할 때까지 대기 (블로킹) 데드 락(Deadlo..
-
공유 락(Shared Lock, S-Lock)과 배타 락(Exclusive Lock, X-Lock)DB 2024. 11. 10. 01:53
1. 공유 락(Shared Lock, S-Lock)읽기 작업(SELECT)을 위한 잠금여러 트랜잭션이 동시에 같은 데이터에 대해 공유락을 획득할 수 있음데이터를 읽을 수는 있지만 수정은 불가능다른 트랜잭션의 공유락과 호환되지만, 배타락과는 호환되지 않음사용 예시SELECT * FROM employees WHERE id = 1 LOCK IN SHARE MODE;2. 배타 락(Exclusive Lock, X-Lock)쓰기 작업(INSERT, UPDATE, DELETE)을 위한 잠금하나의 트랜잭션만 획득 가능데이터 읽기와 수정 모두 가능다른 트랜잭션의 공유락, 배타락 모두와 호환되지 않음사용 예시SELECT * FROM employees WHERE id = 1 FOR UPDATE;락 호환성 매트릭스 공유 락배..