데이터베이스 : MVCC (Multiversion Concurrency Control) 란 무엇이며 누가 지원합니까?[닫은]

StackOverflow https://stackoverflow.com/questions/27499

  •  09-06-2019
  •  | 
  •  

문제

최근 Jeff는 읽기와 관련된 데이터베이스 교착 상태 문제에 대해 게시 했습니다. MVCC (Multiversion Concurrency Control) 는이 문제를 해결한다고 주장합니다.무엇이며 어떤 데이터베이스가이를 지원합니까?

업데이트 됨 : 지원됨 (다른 것은 무엇입니까?)

  • 오라클
  • postgresql
도움이 되었습니까?

해결책

오라클은 아주 오랫동안 (적어도 oracle 8.0 이후) 우수한 다중 버전 제어 시스템을 갖추고있었습니다.

다음이 도움이 될 것입니다.

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

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

다른 팁

다음은 MVCC를 구현 한 것입니다.

SQL Server 2005 (기본값이 아님, SET READ_COMMITTED_SNAPSHOT ON)

PostgreSQL의 다중 버전 동시성 제어

또한 이 문서 는INSERT, UPDATE 및 DELETE 문을 실행할 때 MVCC의 작동 방식에 대한 다이어그램을 제공합니다.

XtremeData dbX는 MVCC를 지원합니다.

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

Firebird는이를 MGA (Multi Generational Architecture)라고 부릅니다.

원래 버전을 그대로 유지하고이를 사용하는 세션 만 볼 수있는 새 버전을 추가합니다. 커밋되면 이전 버전이 비활성화되고 새 버전이 모든 사용자에게 활성화됩니다 (파일은 데이터와 필요로 쌓입니다.정기 정리).

Oracle은 데이터 자체를 덮어 쓰고 다른 세션 및 롤백을 위해 롤백 세그먼트 / 실행 취소 테이블 스페이스를 사용합니다.

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

다음은 MVCC의 PostgreSQL 문서 페이지 링크입니다. .선택 인용문 (내 강조) : <인용구>

동시성 제어의 MVCC 모델을 사용하는 경우의 주요 이점은 데이터 쿼리 (읽기)를 위해 획득 한 MVCC 잠금이 데이터 쓰기를 위해 획득 한 잠금과 충돌하지 않으므로 읽기는 쓰기 및 쓰기를 차단하지 않는다는 것입니다.읽기를 차단하지 않습니다 .

이것이 Jeff가 교착 상태에 너무 당황한 이유입니다.읽기는 그것들을 유발할 수 없어야합니다.

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

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

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

모든 변경 사항에 대해 100 % 감사가 필요한 시스템을위한 탁월한 솔루션입니다.

MySQL은 InnoDB 테이블을 사용하는 경우 기본적으로 MVCC도 사용합니다. http://dev.mysql.com/doc/refman / 5.0 / en / innodb-multi-versioning.html

McObject는 11/09에서 eXtremeDB 내장 데이터베이스에 선택적 MVCC 트랜잭션 관리자를 추가했다고 발표했습니다.

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

원래 인 메모리 데이터베이스 시스템 (IMDS)으로 개발 된 eXtremeDB는 이제 하이브리드 (인 메모리 / 온 디스크) 스토리지, 고 가용성, 64 비트 지원 등이 포함 된 에디션으로 제공됩니다.

MVCC (다이어그램 포함)에 대한 좋은 설명과 eXtremeDB에 대한 몇 가지 성능 수치가 RTC Magazine에서 McObject의 공동 창립자 겸 CEO가 작성한이 기사에 있습니다.

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

다중 CPU 코어에서 실행되는 많은 작업을 포함하도록 애플리케이션이 확장됨에 따라 MVCC는 점점 더 유용합니다.

DB2 버전 9.7에는 라이센스가 부여 된 postgres plus 버전이 있습니다.이는이 기능 (올바른 모드에서)이이 기능을 지원함을 의미합니다.

Berkeley DB 는 MVCC도 지원합니다.

그리고 BDB 스토리지 엔진 이MySQL에서 사용되는 MySQL은 MVCC도 지원합니다.

Berkeley DB는 매우 강력하고 사용자 정의가 가능한 ACID 준수 DBMS입니다.인덱싱, 마스터-슬레이브 복제를위한 여러 가지 방법을 지원하며 자체 동적 API를 사용하여 순수 키 값 저장소로 사용하거나 원하는 경우 SQL로 쿼리 할 수 있습니다.살펴볼 가치가 있습니다.

MVCC를 수용하는 또 다른 문서 지향 DBMS는 CouchDB 입니다.여기에서 MVCC는 내장 된 P2P 복제에도 큰 장점입니다.

http://vschart.com/list/multiversion-concurrency-control/

Couchbase, OrientDB, CouchDB, PostgreSQL, 프로젝트 Voldemort, BigTable, Percona 서버, HyperGraphDB, 이슬비, 구름, IBM DB2, InterSystems Caché, InterBase

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top