- HOME
- [종료]구루비 DB 스터디
- 2012년 하반기 - 오라클 데이터베이스 멘토링 스터디
- 1st_트랜잭션 동시성 제어
서문
- 오라클 읽기 일관성 구현 : 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. 회원가입 정보를 양쪽 브라우저에 띄워놓고, 정보를 수정해 보자!! 결과는??
그림 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 ) : 트랜잭션이 일단 그 실행을 성공적으로 완료하면 그 결과는 데이터베이스에 영속적으로 저장된다.
- HOME
- [종료]구루비 DB 스터디
- 2012년 하반기 - 오라클 데이터베이스 멘토링 스터디
- 1st_트랜잭션 동시성 제어