레코드 잠금

Record locking

레코드 잠금은 일관되지 않는 결과를 방지하기 위해 데이터베이스의 데이터에 동시에 접근하는 것을 방지하는 기술이다.

전형적인 예는 두 개의 다른 거래에 대해 동일한 은행 계좌를 갱신하려고 시도하는 두 의 은행원들에 의해 증명된다.점원 1과 2는 모두 계정의 기록을 회수한다(즉, 복사).점원 1은 거래를 신청하고 저장한다.점원 2는 저장된 사본에 다른 거래를 적용하고, 원본 기록과 그의 변경사항을 바탕으로 결과를 저장하여 점원 1이 입력한 거래를 덮어쓴다.그 기록에는 더 이상 한 번도 없었던 것처럼 첫 거래가 반영되지 않는다.

이를 방지하기 위한 간단한 방법은 사용자가 레코드를 수정할 때마다 파일을 잠가 다른 사용자가 데이터를 저장할 수 없도록 하는 것이다.이렇게 하면 레코드를 잘못 덮어쓰지 않지만 한 번에 하나의 레코드만 처리할 수 있어 동시에 레코드를 편집해야 하는 다른 사용자가 잠기게 된다.

여러 사용자가 데이터베이스 테이블을 동시에 편집할 수 있도록 허용하고 무제한 액세스에 의해 생성된 불일치를 방지하려면 편집 또는 업데이트를 위해 검색할 때 하나의 레코드를 잠글 수 있다.편집을 위해 동일한 레코드를 검색하려고 하는 사람은 잠금 때문에 쓰기 액세스가 거부된다(단, 구현에 따라 레코드를 편집하지 않고도 볼 수 있다).레코드가 저장되거나 편집이 취소되면 잠금이 해제된다.기록은 데이터 무결성을 보존하면서 다른 변경사항을 덮어쓰도록 저장될 수 없다.

데이터베이스 관리 이론에서, 잠금은 다중 데이터베이스 사용자들 사이의 격리를 구현하기 위해 사용된다.이것은 AID라는 약자의 "I"이다.

자물쇠에 대한 철저하고 권위 있는 설명은 짐 그레이가 썼다.[1]

자물쇠의 세밀도

은행원(위 그림 참조)이 2명의 고객을 대상으로 서비스를 하고 있지만 그들의 계정이 하나의 원장에 포함되어 있는 경우, 각 직원이 한 번에 하나씩 거래를 완료하기 위해 전체 원장 또는 하나 이상의 데이터베이스 테이블을 직원에게 편집하도록 해야 한다(파일 잠금).이 방법은 안전하지만 불필요한 기다림을 유발할 수 있다.

점원이 현재 고객의 계정(다른 계정도 여러 개 포함)을 포함한 한 페이지를 원장으로부터 제거할 수 있다면, 각 고객의 계정이 다른 페이지와 다른 페이지에서 발견된다면, 여러 고객을 동시에 서비스할 수 있다.만약 두 고객이 같은 페이지에 계정을 가지고 있다면, 한 번에 하나의 고객만 서비스를 받을 수 있다.이것은 데이터베이스의 페이지 레벨 잠금과 유사하다.

점원이 각각의 개별 계정을 사용할 수 있는 경우 더 높은 수준의 세분화를 달성한다.이렇게 하면 다른 계정에 접속하는 다른 고객을 기다리지 않고 서비스를 받을 수 있다.이는 기록 수준 잠금과 유사하며 일반적으로 데이터베이스 관리 시스템에서 가장 높은 수준의 잠금 세분화 수준이다.

SQL 데이터베이스에서 레코드를 일반적으로 "행"이라고 부른다.

세밀한 (하위 세트) 잠금 장치를 도입하면 교착 상태라는 상황이 발생할 가능성이 생긴다.점증적 잠금(하나 이상의 엔터티를 잠그고 하나 이상의 추가 엔터티를 잠그는 것)을 사용할 때 교착 상태가 가능하다.예를 들어, 만약 두 명의 은행 고객이 두 명의 점원에게 그들의 계좌 정보를 얻어서 그들이 약간의 돈을 다른 계좌로 이체할 수 있도록 요구한다면, 그 두 계좌는 근본적으로 잠겨 있을 것이다.그런 다음 고객이 점원에게 돈이 서로 계좌로 이체될 것이라고 말하면 점원들은 다른 계좌를 뒤지다가 '사용 중'이라는 것을 발견하고 반환을 기다리게 된다.자신도 모르게 두 점원은 서로 기다리고 있는데, 상대방이 포기하고 계좌를 돌려줄 때까지 둘 다 거래를 마칠 수 없다.이러한 문제를 피하기 위해 다양한 기법이 사용된다.

잠금 장치 사용

기록을 요구하는 기업들 간에 기록 자물쇠를 관리하여 연속적인 보조금을 통해 지나치게 많은 용역을 제공받는 기업이 없고, 다른 기업이 효과적으로 잠기는 기업이 없도록 해야 한다.잠금을 요청하는 실체는 개별 응용프로그램(프로그램) 또는 전체 프로세서가 될 수 있다.

응용 프로그램 또는 시스템은 잠금이 가능한 가장 짧은 시간 동안 유지되도록 설계되어야 한다.데이터 판독은 편집 기능이 없는 경우 잠금이 필요하지 않으며, 잠긴 레코드를 판독하는 것이 보통 허용된다.

다음과 같은 두 가지 주요 유형의 잠금을 요청할 수 있다.

독점 잠금 장치

독점 자물쇠는 보통 기록에 쓸 목적으로 한 개인이 독점적으로 보유하고 있다.잠금 스키마가 목록으로 표현된 경우, 홀더 목록은 하나의 항목만 포함할 것이다.이러한 유형의 잠금 장치는 잠금 처리가 필요한 다른 실체를 효과적으로 차단하므로 다음 작업에 주의를 기울여야 한다.

  • 잠금이 가능한 최단 시간 동안 유지되도록 보장한다.
  • 엔티티가 더 이상 프로세서에서 실행되지 않는 시스템 또는 기능 호출에 대한 잠금을 유지하지 않음 – 교착 상태를 초래할 수 있음.
  • 기업이 어떤 이유로든 예기치 않게 퇴출될 경우 잠금해제가 해제되도록 보장한다.

잠금 장치의 비보유자(대기자)는 라운드 로빈 방식으로 서비스되는 목록이나 FIFO 대기열에서 보관할 수 있다.이것은 모든 가능한 웨이터가 자물쇠를 얻을 수 있는 동등한 기회를 얻고 잠기지 않도록 할 것이다.그 과정을 더욱 가속화하기 위해, 기업이 잠금을 기다리며 잠을 잤다면, 시스템 시간 초과에 따른 웨이크업에서 발견하지 않고 보조금을 통지받으면 성능이 개선된다.

공유 잠금

공유 잠금장치는 홀더 목록에 여러 항목이 포함될 수 있다는 점에서 독점 잠금장치와 다르다.공유 잠금 장치는 모든 홀더가 잠금 장치를 해제한 후까지 기록을 변경할 수 없다는 것을 알고 모든 홀더가 기록 내용을 읽을 수 있도록 한다.다른 법인에 의해 레코드가 이미 잠겨 있는 경우(배타적으로 또는 공유된 경우) 독점 잠금을 얻을 수 없다.

동일한 엔티티에 대한 잠금 요청이 대기 중인 경우 공유 잠금이 허가되면 대기 중인 모든 공유 잠금도 허용될 수 있다.대기열에서 다음에 전용 잠금이 발견되면 모든 공유 잠금이 해제될 때까지 기다려야 한다.독점 잠금장치와 마찬가지로 이러한 공유 잠금장치를 가능한 최소 시간 동안 유지해야 한다.

참고 항목

참조

  1. ^ Gray, Jim & Reuter, Andreas (1993), Distributed Transaction Processing: Concepts and Techniques, Morgan Kaufmann, pp. 375–437, ISBN 1-55860-190-2