다중 버전 병행제어: Difference between revisions
From CS Wiki
(새 문서: 분류:데이터베이스분류:기술사 기출 ;MVCC, Multi Version Concurrency Control ;트랜잭션의 데이터 접근 시, 그 트랜잭션의 타임스탬프와 접근...) |
No edit summary |
||
(2 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
[[분류:데이터베이스]][[분류:기술사 기출]] | [[분류:데이터베이스]][[분류:기술사 기출]] | ||
;MVCC, Multi Version Concurrency Control | ;MVCC, Multi Version Concurrency Control | ||
;트랜잭션의 데이터 접근 시, 그 트랜잭션의 타임스탬프와 접근 데이터의 여러 버전의 타임스탬프를 비교하여, 현재 실행 중인 스케줄의 직렬 가능성이 보장되는 | ;트랜잭션의 데이터 접근 시, 그 트랜잭션의 타임스탬프와 접근 데이터의 여러 버전의 타임스탬프를 비교하여, 현재 실행 중인 스케줄의 직렬 가능성이 보장되는 버전을 선택하는 기법 | ||
* ORACLE 버전 3, MS SQL Server 2005, IBM DB2 9.7 버전부터 MVCC 지원 | * ORACLE 버전 3, MS SQL Server 2005, IBM DB2 9.7 버전부터 MVCC 지원 | ||
Line 11: | Line 11: | ||
== 동작 절차 == | == 동작 절차 == | ||
[[파일:MVCC.png|600px]] | |||
* 데이터를 변경할 대마다 그 변경사항을 UNDO 영역에 저장 | * 데이터를 변경할 대마다 그 변경사항을 UNDO 영역에 저장 | ||
* 데이터를 읽다가 트랜잭션 시작 시점 이후에 변경된 값을 발견하면, UNDO 영역에 저장된 정보를 이용해 트랜잭션 시작 시점의 일관성 있는 버전(CR Copy)를 사용 | * 데이터를 읽다가 트랜잭션 시작 시점 이후에 변경된 값을 발견하면, UNDO 영역에 저장된 정보를 이용해 트랜잭션 시작 시점의 일관성 있는 버전(CR Copy)를 사용 | ||
Line 22: | Line 23: | ||
** UNDO 블록 I/O, CR Copy 생성, CR 블록 캐싱과 같은 부가적인 작업의 오버헤드 발생 | ** UNDO 블록 I/O, CR Copy 생성, CR 블록 캐싱과 같은 부가적인 작업의 오버헤드 발생 | ||
** 트랜잭션 충돌시 복귀처리하므로, 연쇄 복귀 초래 가능성 | ** 트랜잭션 충돌시 복귀처리하므로, 연쇄 복귀 초래 가능성 | ||
== 참고 문헌 == | |||
* [http://www.datanet.co.kr/news/articleView.html?idxno=116534 MVCC의 역사 및 개념 정리] |
Latest revision as of 07:38, 6 January 2020
- MVCC, Multi Version Concurrency Control
- 트랜잭션의 데이터 접근 시, 그 트랜잭션의 타임스탬프와 접근 데이터의 여러 버전의 타임스탬프를 비교하여, 현재 실행 중인 스케줄의 직렬 가능성이 보장되는 버전을 선택하는 기법
- ORACLE 버전 3, MS SQL Server 2005, IBM DB2 9.7 버전부터 MVCC 지원
기존 로킹 기법의 문제점[edit | edit source]
- 동시성 제어의 목표는 병행성을 최대화하면서도 데이터 무결성 유지
- 읽기 작업에 공유 Lock을 사용하는 일반적인 로킹 기법은 읽기·쓰기 작업이 서로 방해 유발
- 데이터 일관성을 위해 로킹 강화 → 동시성 저하 발생
동작 절차[edit | edit source]
- 데이터를 변경할 대마다 그 변경사항을 UNDO 영역에 저장
- 데이터를 읽다가 트랜잭션 시작 시점 이후에 변경된 값을 발견하면, UNDO 영역에 저장된 정보를 이용해 트랜잭션 시작 시점의 일관성 있는 버전(CR Copy)를 사용
장단점[edit | edit source]
- 장점
- 문장수준 읽기 일관성 보장, 트랙잭션 수준 읽기 일관성 보장 가능
- 쿼리 도중 배타적 Lock이 걸린, 즉 변경이 진행 중인 레코드를 만나더라도 대기하지 않기 때문에 동시성 측면에 유리
- 쓰기보다 읽기 연산이 많은 경우 효율 향상
- 단점
- UNDO 블록 I/O, CR Copy 생성, CR 블록 캐싱과 같은 부가적인 작업의 오버헤드 발생
- 트랜잭션 충돌시 복귀처리하므로, 연쇄 복귀 초래 가능성