InnoDB MVCC 작동 방식 이해

coldplay.xixi
풀어 주다: 2020-10-10 17:51:18
앞으로
1815명이 탐색했습니다.

InnoDB MVCC 작동 방식 이해

InnoDB의 MVCC는 각 레코드 행 뒤에 두 개의 숨겨진 열을 저장하여 구현됩니다. 이 두 열 중 하나는 행의 생성 시간을 보유하고 다른 하나는 행의 만료 시간(또는 삭제 시간)을 보유합니다. 물론 저장되는 것은 실제 시간 값이 아니라 시스템 버전 번호이다. 새로운 트랜잭션이 시작될 때마다 시스템 버전 번호가 자동으로 증가됩니다. 트랜잭션 시작 시 시스템 버전 번호는 트랜잭션의 버전 번호로 사용되며, 이는 쿼리된 각 레코드 행의 버전 번호와 비교하는 데 사용됩니다. 반복 읽기 격리 수준에서 MVCC가 어떻게 작동하는지 살펴보겠습니다.

SELECT

InnoDB는 다음 두 가지 조건

a에 따라 각 행 레코드를 확인합니다. InnoDB는 버전이 현재 트랜잭션 버전보다 이전인 데이터 행만 찾습니다(즉, 행의 시스템 버전 번호가 더 낮습니다). 트랜잭션의 시스템 버전 번호 이상), 이는 트랜잭션이 읽은 행이 트랜잭션이 시작되기 전에 이미 존재했거나 트랜잭션 자체에 의해 삽입 또는 수정되었음을 보장합니다.

b. 행의 삭제된 버전이 정의되지 않았거나 현재 트랜잭션 버전 번호보다 큽니다. 이렇게 하면 트랜잭션이 읽은 행이 트랜잭션이 시작되기 전에 삭제되지 않았음을 보장합니다.

위의 두 조건을 만족하는 레코드만 쿼리 결과로 반환될 수 있습니다.

INSERT

InnoDB는 현재 시스템 버전 번호를 새로 삽입된 각 행의 행 버전 번호로 저장합니다.

DELETE

InnoDB는 현재 시스템 버전 번호를 삭제된 각 행의 행 삭제 ID로 저장합니다.

UPDATE

InnoDB는 새 레코드 행을 삽입하고 현재 시스템 버전 번호를 행 버전 번호로 저장하며 현재 시스템 버전 번호를 행 삭제 식별자로 원래 행에 저장합니다.

대부분의 읽기 작업을 잠그지 않고 수행할 수 있도록 이 두 개의 추가 시스템 버전 번호를 저장하세요. 이 디자인은 데이터 읽기 작업을 매우 간단하게 만들고 성능도 매우 좋으며 표준을 충족하는 행만 읽도록 보장합니다. 단점은 레코드의 각 행에 추가 저장 공간, 더 많은 행 확인 및 일부 추가 유지 관리 작업이 필요하다는 것입니다.

MVCC는 REPEATABLE READ 및 READ COMMITTED의 두 가지 격리 수준에서만 작동합니다. 다른 두 격리 수준은 READ UNCOMMITTED가 항상 현재 트랜잭션 버전을 따르는 데이터 행이 아닌 최신 데이터 행을 읽기 때문에 MVCC와 호환되지 않습니다. SERIALIZABLE은 읽은 모든 행을 잠급니다.

관련 학습 권장 사항: mysql 데이터베이스

위 내용은 InnoDB MVCC 작동 방식 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:juejin.im
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿