IT/DB
[DB] Row Lock과 Table Lock
_KH_
2025. 5. 31. 11:47
DB락 : DB에서 동시에 여러 사용자가 데이터를 처리할 시 데이터 무결성과 경쟁 조건 방지를 위해 락을 사용함.
→ 크게는 Row Lock, Table Lock으로 나뉜다.
1. Row Lock (행 단위 잠금) : 데이터 테이블에서 특정 행만 잠그는 방식
- 이 행을 제외한 나머지 행에 대해서는 사용자가 자유롭게 작업 가능
■ 장점
1) 병행 처리 효율적 : 동시에 여러 트랜잭션이 다른 행을 수정 가능
2) 데이터 충돌 최소화
3) 큰 테이블에서도 최소한의 락 범위
■ 단점
1) 락을 관리하는 오버헤드가 커짐
2) 데드락 발생 가능성이 높아진다.
■ 예시
-- 특정 회원의 정보만 업데이트 (해당 행만 락)
UPDATE member SET name = '홍길동' WHERE member_id = 1001;
2. Table Lock (테이블 단위 잠금) : 전체 테이블을 잠그는 방식
- 하나의 트랜잭션이 테이블을 사용 중일 때 다른 트랜잭션은 읽기/쓰기 제한을 받음
■ 장점
1) 락 관리가 간단함 (오버헤드 적음)
2) 데드락 발생 가능성 거의 없음
3) 대량 업데이트/삭제 시 안전
■ 단점
■ 병렬 처리 불가 → 동시성 저하
■ 전체 테이블이 잠겨 다른 사용자 대기 발생
■ 예시
-- 테이블 전체에 쓰기 락을 걸고 처리
LOCK TABLES product WRITE;
-- 상품 전체 가격을 일괄 변경
UPDATE product SET price = price * 0.9;
-- 락 해제
UNLOCK TABLES;
3. Row Lock vs Table Lock 차이 비교
항목 | ROW LOCK | TABLE LOCK |
잠금 범위 | 특정 행(ROW) | 전체 테이블 |
동시 처리 가능 | 높음 | 낮음 |
데드락 발생 가능 | 있음 | 없음에 가까움 |
락 관리 오버헤드 | 큼 | 작음 |
사용 예시 | 사용자 1명 정보 수정 | 재고 일괄 조정, 테이블 구조 변경 |
- ROW LOCK은 동시성 처리가 중요한 온라인 서비스(DB에 사용자 요청이 많을 때)에 적합하다.
- TABLE LOCK은 대량 처리, 백업, 배치 작업 등 일괄 작업에 적합하다.
- 트랜잭션 충돌 빈도와 데이터 처리량을 고려해 적절히 선택할 것!