데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미
트랜잭션 처리의 순차성을 보장하기 위한 방법
서로 다른 작업에서 같은 자원을 동시에 필요로 할 때 자원 경쟁이 일어나는데, 이때 순서대로 사용되는 동시성을 보장하기 위한 기능
공유(Shared) Lock과 베타(Exclusive) Lock이 존재
데이터를 읽을 때 사용되어지는 Lock
데이터를 변경하고자 할 때 사용
데이터베이스 범위의 Lock은 전체 데이터베이스를 기준으로 lock을 설정
즉, 1개의 세션만이 DB의 데이터에 접근이 가능
해당 기능은 일반적으론 사용 X
사용하는 때가 있다면 DB의 소프트웨어 버전을 올린다던지 주요한 DB의 업데이트에 사용
데이터베이스 파일을 기준으로 Lock을 설정
파일: 테이블, row 등과 같은 실제 데이터가 쓰여지는 물리적인 저장소
해당 범위의 Lock은 잘 사용되지 않음
테이블을 기준으로 Lock을 설정
이는 테이블의 모등 행을 업데이트 하는 등의 전체 테이블에 영향을 주는 변경을 수행할 때 유용
즉 DDL(create, alter, drop 등) 구문과 함께 사용되며 DDL Lock이라고도 함
파일의 일부인 페이지와 블록을 기준으로 Lock을 설정
잘 사용되지 않음
컬럼을 기준으로 Lock을 설정
하지만 이 형식은 Lock 설정 및 해제의 리소스가 많이 들기 때문에 일반적으로 사용되진 않음, 지원하는 DBMS도 많지 않음
1개의 행(Row)를 기준으로 Lock을 설정
DML에 대한 Lock으로 가장 일반적으로 사용하는 Lock
Lock간(베타 - 베타, 베타 - 공유)의 경합이 발생하여 특정 Transaction이 작업을 진행하지 못하고 멈춰선 상태
공유 Lock끼린 블로킹이 발생하지 않지만 베타 Lock은 블로킹을 발생 시킴
블로킹을 해소하기 위해서는 이전의 트랜잭션이 완료(커밋 OR 롤백)되어야 한다.
뒤에 들어온 트랜잭션은 이전 트랜잭션이 마무리되어야 이후 진행이 가능하다.
이런 경합은 성능에 좋지않은 영향을 미쳐 경합을 최소화 할 필요가 있다.
두 트랜잭션이 각각 Lock을 설정하고 다음 서로의 Lock에 접근하여 값을 얻어오려고 할 때
이미 각각의 트랜잭션에 의해 Lock이 설정되어 있기 때문에
양쪽 트랜잭션 모두 영원히 처리가 되지않게 되는 상태
교착상태가 발생하면 DBMS가 둘 중 한 트랜잭션에 에러를 발생시킴으로써 문제를 해결
교착상태가 발생할 가능성을 줄이기 위해선 접근 순서를 동일하게 하는것이 중요
활동(Active): 트랜잭션이 실행중인 상태
실패(Failed): 트랜잭션 실행에 오류가 발생하여 중단된 상태
철회(Aborted): 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
부분 완료(Partially Committed): 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
완료(Committed): 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태