완전성
을 보장해 주는 것사용자 입장
: 작업의 논리적 단위시스템 입장
: 데이터 접근 또는 변경하는 프로그램의 단위🔎 Transaction과 Lock
잠금(Lock)
: 동시성 제어를 위한 기능
- 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할
트랜잭션
: 데이터 정합성 보장을 위한 기능
- 하나의 논리적인 작업 셋 중 하나의 쿼리가 있든 두 개 이상의 쿼리가 있든 관계없이 논리적인 작업 셋 자체가 100% 적용되거나 아무것도 적용되지 않아야 함을 보장하는 것
트랜잭션 범위를 최소화해야 함
일반적으로 데이터베이스 커넥션은 개수가 제한적
즉, 교착상태
발생
교착 상태란?
- 두 개 이상의 트랜잭션이 특정 자원(테이블 or 행)의 잠금(Lock)을 획득한 채 서로 상대방 트랜잭션이 소유한 잠금을 요구해 무한정 기다리는 상황
1. 트랜잭션 자주 커밋하기
2. 정해진 순서로 테이블 접근하기
3. 읽기 잠금 획득 (SELECT ~ FOR UPDATE) 사용 피하기
4. 테이블 단위 Lock(잠금) 획득해 갱신 직렬화하기