데이터베이스에서 락(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