MySQL 이 환 독 을 어떻게 해결 하 는 지 자세히 알 아 보 세 요.
한 번 의 업무 에서 여러 번 조회 한 후에 결과 집의 개수 가 일치 하지 않 는 상황 을 환 독 이 라 고 한다.
많이 나 오 거나 적은 줄 을 환 행 이 라 고 합 니 다.
2.왜 환 독 을 해결 해 야 합 니까?
높 은 병발 데이터베이스 시스템 에서 사무 와 사무 간 의 격 리 성,그리고 사무 자체 의 일치 성 을 확보 해 야 한다.
3.MySQL 은 환 독 을 어떻게 해결 합 니까?
만약 당신 이 이 글 을 보 았 다 면,나 는 당신 이 더러 운 독 서 를 이해 하고 중복 독 서 를 할 수 없 으 며 중복 독 서 를 할 수 없다 는 것 을 묵인 할 것 입 니 다.
1.다 중 버 전 병행 제어(MVCC)(스냅 샷 읽 기)
대부분의 데이터 베 이 스 는 다 중 버 전의 병행 통 제 를 실현 하고 데이터 스냅 샷 을 저장 하여 이 루어 진다.
InnoDB 의 경우 줄 마다 두 글자 가 남아 있다.하 나 는 줄 의 생 성 버 전 이 고,하 나 는 줄 의 삭제(만 료)버 전 입 니 다.버 전 번 호 는 매번 업무 가 시 작 될 때마다 증가 합 니 다.트 랜 잭 션 은 데 이 터 를 가 져 올 때마다 현재 트 랜 잭 션 버 전보 다 작 게 만 든 데이터 와 만 료 된 버 전이 현재 버 전보 다 큰 데 이 터 를 가 져 옵 니 다.
일반적인 select 는 바로 스냅 샷 으로 읽 는 것 이다.
select * from T where number = 1;
원리:역사 데 이 터 를 스냅 샷 으로 저장 하기 때문에 다른 사무 가 데 이 터 를 증가 하고 삭제 하 는 것 은 현재 업무 에 있어 서 보이 지 않 습 니 다.2.next-key 자물쇠(현재 읽 기)
next-key 자 물 쇠 는 두 부분 을 포함한다.
기록 자물쇠
간극 자물쇠
기록 자 물 쇠 는 색인 에 추 가 된 자물쇠 이 고 간극 자 물 쇠 는 색인 사이 에 추 가 된 것 이다.(생각:열 에 색인 이 없 으 면 무슨 일이 일어 날 까요?)
select * from T where number = 1 for update;
select * from T where number = 1 lock in share mode;
insert
update
delete
원리:현재 데이터 줄 과 이전 데이터 와 다음 데이터 사이 의 간격 을 잠 그 고 이 범위 에서 읽 은 데이터 가 일치 하도록 합 니 다.기타:MySQL InnoDB 엔진 RR 격 리 단계 에서 환 독 을 해 결 했 는 지 여부
github 의 댓 글 을 인용 하 다.
Mysql 이 공식 적 으로 제시 한 환 독 해석 은 한 업무 에서 두 번 째 select 가 row 가 많 으 면 환 독 이 라 고 할 수 있다 는 것 이다.
a.사무 가 먼저 select,b 사무 insert 는 확실히 gap 자 물 쇠 를 추가 합 니 다.그러나 b 사무 commt 가 있 으 면 이 gap 자 물 쇠 는 방출 됩 니 다.(방출 후 a 사 무 는 마음대로 dml 작업 할 수 있 습 니 다)a 사 무 를 다시 select 한 결 과 는 MVCC 에서 첫 번 째 select 와 같 습 니 다.이 어 a 사 무 는 조건 없 이 update 합 니 다.이 update 는 모든 줄 에 작용 합 니 다(b 사 무 를 포함 하여 새로 추 가 된 것).a.트 랜 잭 션 을 다시 선택 하면 b 트 랜 잭 션 의 새 줄 이 나타 납 니 다.그리고 이 새 줄 은 update 로 수정 되 었 습 니 다.실제 테스트 는 RR 단계 에서 이 렇 습 니 다.
이렇게 이해 하면 Mysql 의 RR 등급 은 확실히 환 독 을 막 을 수 없다.
친구
스냅 샷 읽 기 상황 에서 my sql 은 뮤 직 비디오 cc 를 통 해 환 독 을 피한다.
현재 읽 기 상황 에서 my sql 은 next-key 를 통 해 환 독 을 피한다.
select * from t where a=1;스냅숏
select * from t where a=1 lock in share mode;현재 읽 기
스냅 샷 을 현재 읽 은 결과 와 다 르 게 읽 을 수 없 는 상황 은 환 독 이 라 고 생각 하 는데 이것 은 두 가지 다른 사용 이다.그래서 나 는 my sql 의 rr 등급 이 환 독 을 해결 했다 고 생각한다.
결론 부터 말 하면 MySQL 저장 엔진 인 이 노 DB 격 리 단계 RR 이 환 독 문 제 를 해결 했다.
한 문 제 를 인용 한 바 와 같이 T1 select 이후 update 는 T2 에 있 는 insert 의 데 이 터 를 함께 업데이트 합 니 다.그러면 한 줄 이 더 나온다 고 생각 하기 때문에 환 독 을 막 을 수 없습니다.보기 에는 빈틈 이 없 지만 사실은 잘못된 것 입 니 다.InnoDB 에 스냅 샷 읽 기와 현재 읽 기 두 가지 모드 가 설정 되 어 있 습 니 다.스냅 샷 만 읽 으 면 자 연 스 럽 게 읽 기 문제 가 없습니다.그러나 문 구 를 현재 읽 기로 올 리 면 T1 은 select 에서 다음 과 같은 문법 을 사용 해 야 합 니 다.select*from t for update(lock in share mode)가 현재 읽 기 에 들 어가 면그러면 자 연 스 럽 게 T2 가 데 이 터 를 삽입 할 수 있 는 일이 없다.
주의 하 다.
next-key 는 환 독 문 제 를 잘 해결 하지만 일반적인 법칙 에 따라 격 리 등급 이 높 을 수록 병행 이 낮다.
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 MySQL 이 환 독 의 상세 한 해석 과 통합 을 어떻게 해결 하 는 지 여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redash를 사용할 때 몰랐던 SQL을 쓰는 법을 배웠습니다.최근 redash에서 sql을 쓸 기회가 많고, 이런 쓰는 방법이 있었는지와 sql에 대해 공부를 다시하고 있기 때문에 배운 것을 여기에 씁니다. Redash란? 월별로 데이터를 표시하고 싶습니다 주별로 데이터를 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.