2008-08-26 9 views
38

최근에 Jeff는 읽기와 관련된 데이터베이스 교착 상태 문제로 인해 posted을 가지고 있습니다. Multiversion Concurrency Control (MVCC)이이 문제를 해결한다고 주장합니다. 그것은 무엇이며 어떤 데이터베이스가이를 지원합니까?데이터베이스 : MVCC (Multiversion Concurrency Control) 란 무엇이며 누가 그것을 지원합니까?

업데이트 : 이러한 지원이 (다른 사람?)

  • 오라클
  • PostgreSQL을
+1

원본 Jim Starkey의 백서는 얻을 수 없지만 나중에 간략한 설명이 있습니다 : http : // web. firebirdsql.org/doc/whitepapers/fb_vs_ibm_vs_oracle.htm http://mike.kruckenberg.com/archives/2006/04/jim_starkey_int.html –

+0

[H2 데이터베이스 엔진] (http://www.h2database.com/)도 있습니다. [기본적으로 MVCC 지원] (http://h2database.com/html/advanced.html#mvcc). –

답변

32

오라클은 도움이 다음

(적어도 오라클 8.0 이후) 매우 긴 년부터의 뛰어난 멀티 버전 제어 시스템을했다.

  1. 사용자 A가 트랜잭션을 시작하고 시간 T1
  2. 사용자 B에 어떤 값이 1000 개의 행을 업데이트 시간 T2에서 동일 1,000 행을 판독한다.
  3. 사용자 A는 값 Y (원래 값 X)의 행 543을 업데이트합니다.
  4. 사용자 B는 행 543에 도달하여 시간 T1 이후 트랜잭션이 작동 중임을 찾습니다.
  5. 데이터베이스는 수정되지 않은 레코드를 로그에서 반환합니다. 반환 된 값은 T2보다 작거나 같은 시간에 커밋 된 값입니다.
  6. 레코드를 다시 실행 로그에서 다시 검색 할 수없는 경우 데이터베이스가 적절히 설정되지 않았다는 의미입니다. 로그에 더 많은 공간이 할당되어야합니다.
  7. 이렇게하면 읽기의 일관성이 보장됩니다. 리턴 된 결과는 트랜잭션의 시작 시간과 항상 동일합니다. 따라서 트랜잭션 내에서 일관성이 유지됩니다.

나는 가장 간단한 용어로 가능한 한 설명하려고 노력했다 ... 데이터베이스에서 다중 버전 화가 많이있다.

+0

+1 오라클 8.0 이전부터 - 오라클 4.0 이후로 나는 믿습니다. –

+0

그리고 읽기 일관성과 반복 읽기간에 동일합니까? – Chao

1

여기는 link to the PostgreSQL doc page on MVCC입니다. 선택 견적 (강조 광산) :

동시성 제어 MVCC 모델을 사용하는 대신 잠금의 주요 장점은 쿼리 취득 MVCC 잠금에서 (읽기) 데이터 쓰기 데이터를 획득 한 잠금 장치와 충돌하지 않는다는 것입니다, 따라서 읽기 및 쓰기 금지 블록은 결코 읽지 않음을 읽지 않습니다.

이것이 제프가 교착 상태에 너무 혼란 된 이유입니다. 읽는 것은 결코 그들을 일으킬 수 없어야합니다.

1

SQL Server 2005 이상에서는 MVCC를 옵션으로 제공합니다. 그러나 기본값은 아닙니다. MS는 메모리가 작동하는 경우 스냅 숏 격리라고합니다.

1

MVCC는 테이블에 버전 번호 열을 추가하고 수동으로 구현할 수 있으며 항상 업데이트 대신 삽입 작업을 수행합니다.

이 비용은 훨씬 더 큰 데이터베이스이며 최신 레코드를 찾기 위해 하위 쿼리가 필요하기 때문에 선택이 느립니다.

모든 변경 사항을 100 % 감사해야하는 시스템에 적합한 솔루션입니다. http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html

1

MySQL은 또한 기본적으로 MVCC를 사용합니다.

그들은 원래 버전을 그대로 유지하고 사용하는 세션 만 볼 수있는 새로운 버전을 추가합니다. 커밋 된 이전 버전은 사용할 수 없으며 최신 버전은 모든 사용자에게 사용 가능합니다 (파일이 데이터 및 정기적 인 정리가 필요함).

오라클은 데이터 자체를 덮어 쓰며 다른 세션과 롤백을 위해 롤백 세그먼트/실행 취소 테이블 공간을 사용합니다. 다음

2

파이어 버드가 않습니다, 그들은 MGA (멀티 세대 아키텍처)를 호출하면 InnoDB의 테이블을 사용하는 경우

+0

Interbase와 동일하지만 파이어 버드 (firebird)가있을 때 사용할 수 없다고 생각합니다. http://ibexpert.net/ibe/index.php?n=Doc.MultiGenerationalArchitectureMGAAndRecordVersioning –

+1

파이어 버드는 Interbase입니다 ... :) –

+0

파이어 버드 WAS Interbase, 그들은 분기하고 있습니다 –

8

은 MVCC의 구현이 있습니다

SQL Server 2005의

(비 기본, SET READ_COMMITTED_SNAPSHOT ON)

오라클 (이후 버전 8)

MySQL을 5 (InnoDB 테이블 만 사용)

PostgreSQL을

파이어 버드

인포믹스

난 사이베이스와 IBM DB2 메인 프레임/LUW은 MVCC의 구현이없는 확신

0

DB2 버전 9.7을 위해 Postgress의 라이센스 버전이 플러스 그 안에. 즉,이 기능 (올바른 모드에서)이이 기능을 지원합니다.

1

McObject은 그것의 eXtremeDB 임베디드 데이터베이스 옵션 MVCC 트랜잭션 관리를 추가했다고 11/09 발표 :

http://www.mcobject.com/november9/2009

eXtremeDB, 원래 메모리 데이터베이스 시스템 (IMDS)로 개발된다 하이브리드 (in-memory/on-disk) 스토리지, 고 가용성 (High Availability), 64 비트 지원 등의 버전으로 제공됩니다.

1

MVCC의 좋은 설명이있다 - 다이어그램 - RTC 매거진에 McObject의 공동 설립자이자 CEO에 의해 작성된이 문서의 eXtremeDB에 대한 몇 가지 성능 수치는 :

http://www.rtcmagazine.com/articles/view/101612

분명히 MVCC 응용 프로그램이 여러 CPU 코어에서 실행되는 많은 작업을 포함하도록 확장함에 따라 점차 유용합니다.

2

XtremeData dbX는 MVCC를 지원합니다.

또한 dbX는 FPGA 하드웨어로 구현 된 SQL 프리미티브를 사용할 수 있습니다.

0

Berkeley DB도 MVCC를 지원합니다.

그리고 BDB storage engine이 MySQL에서 사용되는 경우 MySQL은 MVCC도 지원합니다.

Berkeley DB는 매우 강력하고 사용자 정의 할 수있는 ACID 준수 DBMS입니다. 그것은 인덱싱, 마스터 - 슬레이브 복제를위한 여러 가지 다른 메소드를 지원하며, 자체 동적 API를 사용하여 순수 키 값 저장소로 사용하거나 원하는 경우 SQL로 쿼리 할 수 ​​있습니다. 한번보세요.

MVCC를 수용하는 또 다른 문서 지향 DBMS는 CouchDB입니다. 여기 MVCC는 또한 피어 투 피어 (peer-to-peer) 복제 기능이 내장 된 큰 장점입니다. http://vschart.com/list/multiversion-concurrency-control/

카우치베이스 주식회사, OrientDB, CouchDB를, PostgreSQL을, 프로젝트 볼드 모트, 빅 테이블, Percona 서버, HyperGraphDB, 이슬비, Cloudant, IBM DB2, 인터 캐시 에서

0

InterBase

2

SAP HANA도 MVCC를 사용합니다. SAP HANA는 전체 인 메모리 컴퓨팅 시스템이므로 MVCC 비용이 매우 낮습니다. :)

+1

그 문장에 대한 링크를 추가 할 수 있습니다 . –