제1절 Lock

  • 공유 Lock 끼리는 호환되므로 한 자원에 대해 여러 사용자가 동시에 공유 Lock을 설정할 수 있다.
  • 배타적 Lock은 어떤 Lock모드와도 호환되지 않아 오직 한 사용자만이 Lock을 설정할 수 있다.
  • Oracle은 데이터를 읽을 때 공유 Lock을 사용하지 않는다. 따라서 읽기 작업이 갱신 작업을 방해하거나 기다리지 않는다.
  • Oracle이 공유 Lock을 사용하지 않고도 일관성을 유지할 수 있는 것은 Undo데이터를 이용한 다중버전 동시성 제어 매커니즘을 사용하기 때문이다.
  • 블로킹(Blocking)과 교착상태(Deadlock)는 다르다. 블로킹은, Lock 경합이 발생해 특정 세션이 작업을 진행하지 못하고 멈춰 선 상태를 말한다. 교착상태(Deadlock)는, 두 세션이 각각 Lock을 설정한 리소스를, 서로 액세스하려고 마주보고 진행하는 상황을 말하며, 둘 중 하나가 뒤로 물러나지 않으면 영영 풀릴 수 없다.

제2절 트랜잭션

  • 트랜잭션(Transaction)은 업무 처리를 위한 논리적인 작업 단위다.
  • 트랜잭션의 주요 특징은 원자성, 일관성, 격리성, 영속성으로 요약된다.
  • 낮은 단계의 격리성 수준에서 발생할 수 있는 현상으로는, Dirty Rad, Non-Repeatable Read, Phantom Read 가 있다.
  • ANSI/ISO SQL 표준에서 정의한 트랜잭션 격리성 수준으로는 Read Uncommitted, Read Committed, Repeatable Read, Serializable Read 의 4가지가 있다.

제3절 동시성 제어

  • 다수 사용자에 의한 다중 트랜잭션이 동시에 작동할 때 DBMS는 이들 트랜잭션의 상호 간섭 작용에서
    데이터베이스를 보호할 수 있어야 하며, 이를 동시성 제어라고 한다.
  • 다수 사용자가 데이터를 동시에 액세스할 때 Lock을 통해 직렬화 시킨다.
  • 동시성 제어가 어려운 이유는 동시성과 일관성은 트레이드 오프 관계이기 때문이다.
  • 동시에 실행되는 트랜잭션 수를 최대화하면서도 입력, 수정, 삭제, 검색 시 데이터 무결성이 유지되도록 노력해야 한다.
  • 동시성 제어 기법에는 비관적 동시성 제어와 낙관적 동시성 제어가 있다.
  • Oracle을 시작으로 많은 DBMS가 다중버전 동시성 제어(MVCC) 매커니즘을 도입하고 있다.
  • MVCC 매커니즘 하에서는 읽기 작업과 쓰기 작업이 서로 방해하지 않아 동시성을 높이면서도 높은 읽기 일관성을 유지해 준다.
  • 문장수준 읽기 일관성은, 다른 트랜잭션에 의해 데이터의 추가, 변경, 삭제가 발생하더라도 단일 SQL문 내에서 일관성 있게 값을 읽는 것을 말한다. 일관성 기준 시점은 쿼리 시작 시점이 된다.
  • 트랜잭션 수준 읽기 일관성은, 다른 트랜잭션에 의해 데이터의 추가, 변경, 삭제가 발생하더라도 트랜잭션 내에서 일관성 있게 값을 읽는 것을 말한다. 일관성 기준 시점은 트랜잭션 시작 시점이 된다.