서문

  • 오라클 읽기 일관성 구현 : undo 정보를 이용해 쿼리 시점을 기준으로 일관성 있는 결과값을 도출함.
  • 타DBMS 읽기 일관성 구현 : Lock을 이용해 구현함.
  • SQL Server에서도 스냅샵모드를 설정하면 오라클의 읽기 일관성 모델로 운영이 가능
    ->오라클이 우위에 있음을 반증
  • 필자의 경험으로 봤을 때, 오라클 환경의 개발자들은 타 DBMS 개발자들에 비해 LOCK과 동시성(Concurrency Control)
    에 대한 개념이 부족함.

  • 오라클에서 LOCK 경합의 대부분은 enq:TM-contention 과 enq:TX-row lock contention 이벤트 임
  • 위의 이벤트들은 위 그림에서도 볼 수 있듯이 WAIT_CLASS 가 Concurrency 가 아닌 Application 으로 분류됨
    ->이것은 lock 과 관련된 이슈들은 dba의 이슈가 아니라, 개발자의 이슈임을 밝히고 있음.

1.트랜잭션 동시성 제어

1.1 동시성 제어란( Concurrency Control )?

  • 동시에 실행되는 트랜잭션 수를 최대화하면서도 입력, 수정, 삭제, 검색 시 데이터의 무결성이 유지될 수 있도록 노력하는 것을 말한다.
  • 여러 개 트랜잭션이 동시에 수행될 대, 데이터베이스 애플리케이션은 이들 트랜잭션이 서로 간섭을 일으키는 현상을 최소화하면서 데이터의 일관성과
    무결성이 보장되도록 개발되어야 하는 것이다.
  • 사례1. 회원가입 정보를 양쪽 브라우저에 띄워놓고, 정보를 수정해 보자!! 결과는??
  • Quiz!! 과연 오라클 클럽은??
그림 2-1 p. 103

  • 동시성( Concurrency ) : 다중 사용자가 같은 데이터를 동시에 액세스
  • 일관성( Consistency ) : 자신이 발생시킨 변경 사항과 다른 트랜잭션의 변경 사항( 읽을 수 있는 버전만 허용 )을 포함해 일관성 있는 상태로 데이터를 제공

1.2 동시성 제어가 어려운 이유.?

  • 동시성과 일관성이 트레이드 오프(Trade-off)관계에 있다는데 있다. like? 짬짜면
  • 동시성을 높이려고 Lock의 사용을 최소화하면 읽기 일관성을 유지하기 어렵고, 데이터의 일관성을 높이려고 Lock을 많이 사용하면 동시성이 떨어지게 된다.
  • 따라서 동시성과 일관성이라는 두 마리 토기를 한거번에 잡으려면 매우 세심한 주의가 필요하다.

1.3 트랜잭션이란?

  • Q.두 개 이상의 갱신연산이 동시에 실행될 수 있는가?
    -> 불행히도 그럴 수 없다.
  • 여러 개의 수정작업이 하나의 작업처럼 전부 처리되거나 아예 전부 처리가 안 되도록( All or Nothing )하는 것인데, 이런한 일의 최소 단위를 트랜잭션이라고 한다.
  • 사례1. 계좌이체의 트랜잭션 범위는 어디까지가 타당한 것인가?(Non-Repeatable Read 설명)
  • 사례2. 온라인 쇼핑몰의 주문 트랜잭션 범위는 어디까지가 좋을까??

1.4 트랜잭션의 특징( ACID )

  • 데이터베이스 갱신과 관련하여 트랜잭션은 4가지 중요한 특징을 갖는다.
  • 원자성( Atomicity ) : 앞서 트랜잭션의 정의 부분에서 이미 설명한 바와 같고 더 이상 분해가 불가능한 업무의 최소단위를 말한다.
  • 일관성( Consistency ) : 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다. 즉 트랜잭션 실행의 결과로 데이터베이스 상태가 모순되지 않는다.
  • 격리성( lsolation ) : 트랜잭션이 실행 중에 생성하는 연산의 중간 결고는 다른 트랜잭션이 접근 할 수 없다.
  • 영속성( Durability ) : 트랜잭션이 일단 그 실행을 성공적으로 완료하면 그 결과는 데이터베이스에 영속적으로 저장된다.