mysql 다 중 버 전 병행 제어 MVCC 의 실현

트 랜 잭 션 격 리 단계 설정

set global transaction isolation level read committed; //   
set session transaction isolation level read committed; //    
트 랜 잭 션 제출 방식 수정(자동 제출 여부,my sql 기본 자동 제출)

SET AUTOCOMMIT = 1; //    , 0    
데이터베이스 엔진 에 따라 MVCC 모델 이 각각 다 르 고 전형 적 으로 낙관적 이 고 비관 적 인 병행 제어 가 있다.
innodb
설명:
InnoDB 의 MVCC 는 각 줄 의 기록 뒤에 숨겨 진 열 두 개 를 저장 함으로써 이 루어 진다.이 두 열 중 하 나 는 줄 의 생 성 시간,저장 줄 의 만 료 시간(또는 삭제 시간)을 저장 합 니 다.물론 저 장 된 것 은 실제 시간 값 이 아니 라 시스템 버 전 번호(system version number)입 니 다.새로운 사 무 를 시작 할 때마다 시스템 버 전 번호 가 자동 으로 증가 합 니 다.트 랜 잭 션 시작 시간의 시스템 버 전 번 호 는 트 랜 잭 션 버 전 번호 로 조회 할 수 있 습 니 다.
SELECT
InnoDB 는 다음 두 가지 조건 에 따라 각 줄 의 기록 을 검사 합 니 다.
a.InnoDB 는 현재 트 랜 잭 션 버 전의 데이터 줄(즉,줄 의 시스템 버 전 번호 가 작 거나 같은 트 랜 잭 션 의 시스템 버 전 번호)만 찾 습 니 다.그러면 트 랜 잭 션 이 읽 은 줄 을 확보 할 수 있 습 니 다.트 랜 잭 션 이 시작 되 기 전에 이미 존재 하거나 트 랜 잭 션 자체 가 삽입 하거나 수정 한 줄 을 확보 할 수 있 습 니 다.
b.줄 의 삭제 버 전 은 정의 되 지 않 거나 현재 트 랜 잭 션 버 전 번호 보다 큽 니 다.이것 은 트 랜 잭 션 이 읽 힌 줄 이 시작 되 기 전에 삭제 되 지 않 았 는 지 확인 할 수 있 습 니 다.
상기 두 가지 조건 에 부합 되 는 기록 만 이 조회 결과 로 되 돌아 갈 수 있다.
INSERT
InnoDB 는 새로 삽 입 된 줄 마다 현재 시스템 버 전 번 호 를 줄 버 전 번호 로 저장 합 니 다.
DELETE
InnoDB 는 삭 제 된 줄 마다 현재 시스템 버 전 번 호 를 줄 삭제 표식 으로 저장 합 니 다.
UPDATE
InnoDB 는 새 줄 기록 을 삽입 하기 위해 현재 시스템 버 전 번 호 를 줄 버 전 번호 로 저장 하고 현재 시스템 버 전 번 호 를 줄 로 저장 하여 표 지 를 삭제 합 니 다.
주의:
MVCC 는 REPEATABLE READ 와 READ COMMITED 두 격 리 단계 에서 만 일한다.다른 두 격 리 단 계 는 MVCC 와 호 환 되 지 않 습 니 다.READ UNCOMITED 는 현재 트 랜 잭 션 버 전에 맞 는 데이터 줄 이 아 닌 최신 데이터 줄 을 항상 읽 기 때 문 입 니 다.SERIALIZABLE 은 읽 은 모든 줄 에 자 물 쇠 를 추가 합 니 다.
테이블 의 상태 보기

show table status like 'task'\G;
더러 운 읽 기,중복 읽 기,환 독 불가
더러 운 읽 기:현재 사 무 는 다른 사 무 를 제출 하지 않 은 상태 로 읽 었 습 니 다.사 무 는 격 리 되 지 않 았 습 니 다.
중복 읽 기 불가:업무 의 격 리 성 을 실현 하 였 으 나 같은 데 이 터 를 두 번 읽 었 을 때 데이터 가 일치 하지 않 음 을 발견 하 였 습 니 다.
환 독:같은 데 이 터 를 두 번 조회 한 결과 새로운 데이터 가 삽입 되 었 습 니 다.주로 중간 에 다른 사무 가 데이터 세트 를 삽입 하기 때 문 입 니 다.(간극 잠 금 을 넣 어 이 문 제 를 해결 하 다)
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기