데이터베이스에서 락(Lock)에 대해 설명해 주세요.
데이터베이스는 데이터를 영속적으로 저장하고 있는 시스템으로, 이런 시스템은 같은 자원(데이터)에 대해서 동시에 접근하는 경우가 생길 수밖에 없다.
이럴 경우 데이터가 오염될 수 있는데 그렇게 되지 않도록 데이터의 일관성과 무결성을 유지해야할 필요가 있다.
Lock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법이다.
Lock의 종류
공유락(Shared Lock)
Read Lock이라고도 한다.
데이터를 읽을 때 사용되는 Lock으로, 이런 공유 락은 공유 락끼리는 동시에 접근이 가능하다.
즉, 하나의 데이터를 읽는 것은 여러 사용자가 동시에 할 수 있는 것이다.
하지만 공유 락이 설정된 데이터에 베타 락을 사용할 수는 없다.
베타락(Exclusive Lock)
Write Lock이라고도 한다.
데이터를 변경하고자 할 때 사용되는 Lock으로, 트랜잭션이 완료될 때까지 유지된다.
베타락은 Lock이 해제될 때까지 다른 트랜잭션(읽기 포함)은 해당 리소스에 접근할 수 없다.
해당 Lock은 다른 트랜잭션이 수행되고 있는 데이터에 대해서는 접근하여 함께 Lock을 설정할 수 없다.
Lock 설정 범위
데이터베이스
1개의 세션만이 DB의 데이터에 접근이 가능하다.
일반적으로 잘 사용하지 않는다.
파일
파일(테이블, row 등과 같은 실제 데이터가 쓰여지는 물리적인 저장소)을 기준으로 Lock을 설정한다.
잘 사용하지 않는다.
테이블
테이블을 기준으로 Lock을 설정하며, 테이블의 모든 행을 업데이트 하는 등의 전체 테이블의 영향을 주는 변경을 수행할 때 유용하다.
DDL(
CREATE,ALTER,DROP등) 구문과 함께 사용되고, DDL Lock이라고도 한다.
페이지와 블록
파일의 일부인 페이지와 블록을 기준으로 Lock을 설정한다.
잘 사용하지 않는다.
컬럼
컬럼을 기준으로 Lock을 설정한다.
Lock 설정 및 해제 리소스가 많이 들어 잘 사용하지 않는다.
행
행(row)을 기준으로 Lock을 설정한다.
DML에 대한 Lock으로 가장 일반적으로 사용하는 Lock이다.
참고
Last updated