Mysql 의 네 가지 격 리 단 계 를 깊이 이해 하 다.

8407 단어 mysql격 리등급
첫째,우선 무엇이 사무 입 니까?
사 무 는 응용 프로그램 에서 일련의 엄밀 한 작업 으로 모든 작업 이 성공 적 으로 이 루어 져 야 합 니 다.그렇지 않 으 면 모든 작업 에서 변경 사항 이 취 소 됩 니 다.즉,사 무 는 원자 성 을 가지 고 한 업무 중의 일련의 조작 이 모두 성공 하거나 하나 도 하지 않 는 다 는 것 이다.
트 랜 잭 션 의 끝 은 두 가지 가 있 습 니 다.트 랜 잭 션 의 모든 절차 가 성공 적 으로 실 행 될 때 트 랜 잭 션 을 제출 합 니 다.한 단계 가 실패 하면 스크롤 백 작업 이 발생 합 니 다.취소 하기 전에 업무 가 시 작 될 때 까지 의 작업 을 취소 합 니 다.
2.업무 의 ACID
사 무 는 네 가지 특징 을 가진다.원자 성(Atomicity),일치 성(Consistency),격 리 성(Isolation)과 지속 성(Durability)이다.이 네 가지 특성 은 ACID 특성 이 라 고 약칭 한다.
     1.원자 성.사 무 는 데이터베이스 의 논리 적 인 작업 단위 로,업무 에 포 함 된 각 조작 은 모두 하거나 하지 않 는 다.
     2.일치 성.트 랜 잭 션 실행 결 과 는 데이터 베 이 스 를 일치 성 상태 에서 다른 일치 성 상태 로 바 꿔 야 합 니 다.따라서 데이터 베 이 스 는 성공 적 인 트 랜 잭 션 제출 결과 만 포함 되 어 있 을 때 데이터 베 이 스 는 일치 하 는 상태 라 고 말 합 니 다.만약 에 데이터 베이스 시스템 운행 중 에 고장 이 나 면 일부 업무 가 완성 되 지 않 으 면 중단 되 어야 합 니 다.이러한 미 완성 업무 가 데이터 베이스 에 대한 수정 중 일 부 는 물리 데이터 베이스 에 기록 되 었 습 니 다.이때 데이터 베 이 스 는 정확 하지 않 은 상태 에 있 거나 일치 하지 않 는 상태 에 있 습 니 다.
     3.격 리 성.하나의 업무 의 집행 은 다른 업무 에 방해 가 되 어 서 는 안 된다.즉,하나의 사무 내부 의 조작 과 사용 하 는 데 이 터 는 다른 병행 업무 에 대해 격 리 되 고 병행 하 는 각 사무 간 에 서로 간섭 할 수 없다.
     4.지속 성.영구적 이 라 고도 한다.한 업무 가 제출 되면 데이터베이스 에 있 는 데이터 에 대한 변 화 는 영구적 이 어야 한 다 는 것 을 말한다.다음 의 다른 조작 이나 고장 은 그 집행 결과 에 아무런 영향 을 주어 서 는 안 된다.
3.Mysql 의 네 가지 격 리 단계
SQL 표준 은 4 가지 격 리 단 계 를 정 의 했 는데 구체 적 인 규칙 을 포함 하여 사무 내외 의 어떤 변화 가 보 이 는 지,어떤 것 이 보이 지 않 는 지 제한 했다.낮은 등급 의 격 리 급 은 일반적으로 더 높 은 병행 처 리 를 지원 하고 더 낮은 시스템 비용 을 가진다.
Uncommitted 읽 기(제출 되 지 않 은 내용 읽 기)
이 격 리 단계 에 서 는 모든 사무 가 제출 되 지 않 은 다른 업무 의 실행 결 과 를 볼 수 있 습 니 다.이 격 리 단 계 는 다른 단계 보다 성능 이 별로 좋 지 않 기 때문에 실제 응용 에 사용 되 는 것 이 매우 적다.제출 되 지 않 은 데 이 터 를 읽 는 것 을 더러 운 읽 기(Dirty Read)라 고도 합 니 다.
Committed 읽 기(제출 내용 읽 기)
이것 은 대부분의 데이터베이스 시스템 의 기본 격 리 단계 입 니 다.그것 은 격 리 의 간단 한 정 의 를 만족 시 켰 다.하나의 사 무 는 이미 제출 한 사무소 의 변화 만 볼 수 있다.이러한 격 리 단 계 는 중복 읽 기(Nonrepeatable Read)를 지원 합 니 다.같은 업무 의 다른 인 스 턴 스 가 이 인 스 턴 스 를 처리 하 는 동안 새로운 commt 가 있 을 수 있 기 때문에 같은 select 는 다른 결 과 를 되 돌려 줄 수 있 습 니 다.
반복 읽 기(다시 읽 기 가능)
이것 은 MySQL 의 기본 트 랜 잭 션 격 리 단계 입 니 다.같은 트 랜 잭 션 의 여러 인 스 턴 스 가 동시에 데 이 터 를 읽 을 때 같은 데이터 줄 을 볼 수 있 도록 합 니 다.그러나 이론 적 으로 이것 은 또 다른 까다 로 운 문 제 를 초래 할 수 있다.즉,환 독(Phantom Read)이다.쉽게 말 하면 환 독 이란 사용자 가 특정한 범위 의 데이터 줄 을 읽 을 때 다른 사무 가 이 범위 에 새 줄 을 삽입 하 는 것 을 말한다.사용자 가 이 범위 의 데이터 줄 을 다시 읽 을 때 새로운'환영'줄 이 있 는 것 을 발견 할 수 있다.InnoDB 와 Falcon 메모리 엔진 은 다 중 버 전 병행 제어(MVCC,Multiversion Concurrency Control)메커니즘 을 통 해 이 문 제 를 해결 했다.
Serializable(직렬 화 가능)
이것 은 가장 높 은 격 리 단계 로 강제 적 인 업무 순 서 를 통 해 서로 충돌 하지 않 고 환 독 문 제 를 해결 할 수 있다.쉽게 말 하면 읽 는 데이터 줄 마다 공유 자 물 쇠 를 추가 하 는 것 이다.이 단계 에 서 는 대량의 시간 초과 현상 과 자물쇠 경쟁 을 초래 할 수 있다.
이 네 가지 격 리 단 계 는 서로 다른 잠 금 형식 으로 이 루어 집 니 다.같은 데 이 터 를 읽 으 면 문제 가 발생 하기 쉽 습 니 다.예 를 들 면:
더러 운 읽 기(Drity Read):어떤 사무 가 데 이 터 를 업 데 이 트 했 습 니 다.다른 사 무 는 이때 같은 데 이 터 를 읽 었 습 니 다.어떤 이유 로 앞의 Roll Back 이 작 동 하면 다음 사무소 에서 읽 은 데이터 가 정확 하지 않 습 니 다.
중복 읽 을 수 없습니다(Non-repeatable read):한 업무 의 두 번 의 조회 에서 데이터 가 일치 하지 않 습 니 다.이것 은 두 번 의 조회 과정 에서 하나의 사무 가 업 데 이 트 된 기 존 데 이 터 를 삽입 한 것 일 수 있 습 니 다.
환 독(Phantom Read):한 업무 의 두 번 의 조회 에서 데이터 펜 수가 일치 하지 않 습 니 다.예 를 들 어 한 업무 가 몇 열(Row)데 이 터 를 조 회 했 고 다른 업 무 는 이때 새로운 몇 열 데 이 터 를 삽입 하 였 습 니 다.이전의 업 무 는 다음 조회 에서 몇 열 데이터 가 이전에 없 었 던 것 임 을 발견 할 수 있 습 니 다.
MySQL 에서 이 네 가지 격 리 단 계 를 실 현 했 는데 각각 다음 과 같은 문제 가 발생 할 수 있 습 니 다.

4.테스트 Mysql 의 격 리 단계
다음은 MySQL 의 클 라 이언 트 프로그램 을 이용 하여 이 몇 가지 격 리 단 계 를 테스트 하 겠 습 니 다.
테스트 데이터 베 이 스 는 demo 이 고 표 는 test 입 니 다.표 구조:

두 명령 행 클 라 이언 트 는 각각 A,B 이다.A 의 격 리 단 계 를 계속 바 꾸 고 B 단 에서 데 이 터 를 수정 합 니 다.
(1)A 의 격 리 단 계 를 read uncommitted 로 설정 합 니 다(읽 기 미 제출)

A:트 랜 잭 션 을 시작 합 니 다.이 때 데이터 가 초기 상태 입 니 다.

B:트 랜 잭 션 을 시작 하고 데 이 터 를 업데이트 하지만 제출 하지 않 습 니 다.

A:데 이 터 를 다시 읽 어 보 니 데이터 가 수정 되 었 습 니 다.이것 이 바로'더러 운 읽 기'입 니 다.

B:스크롤 백

A:데 이 터 를 다시 읽 어 보 니 데이터 가 초기 상태 로 바 뀌 었 습 니 다.

위의 실험 을 통 해 결론 을 얻 을 수 있 습 니 다.사무 B 는 기록 을 갱신 하 였 으 나 제출 하지 않 았 습 니 다.이때 사무 A 는 제출 하지 않 은 기록 을 조회 할 수 있 습 니 다.더러 운 독 서 를 일으키다.읽 기 를 제출 하지 않 은 것 은 가장 낮은 격 리 단계 입 니 다.
(2)클 라 이언 트 A 의 트 랜 잭 션 격 리 단 계 를 read committed 로 설정 합 니 다(읽 기 제출)

A:트 랜 잭 션 을 시작 합 니 다.이 때 데이터 가 초기 상태 입 니 다.

B:트 랜 잭 션 을 시작 하고 데 이 터 를 업데이트 하지만 제출 하지 않 습 니 다.

A:데 이 터 를 다시 읽 어 보 니 데이터 가 수정 되 지 않 았 습 니 다.

B:사무 제출

A:데 이 터 를 다시 읽 어 보 니 데이터 가 바 뀌 었 습 니 다.이 는 B 가 제출 한 수정 사항 이 업무 중의 A 에 의 해 읽 혔 다 는 것 을 의미 합 니 다.이것 이 바로'중복 읽 을 수 없습니다'입 니 다.

위의 실험 을 통 해 결론 을 얻 을 수 있 습 니 다.이미 읽 기 격 리 단계 에 제출 하여 더러 운 읽 기 문 제 를 해결 하 였 으 나 다시 읽 을 수 없 는 문제 가 발생 했 습 니 다.즉,사무 A 가 두 번 조회 한 데이터 가 일치 하지 않 습 니 다.두 번 조회 사이 에 사무 B 가 데 이 터 를 업 데 이 트 했 기 때 문 입 니 다.제출 한 읽 기 는 제출 한 기록 만 읽 을 수 있 지만 중복 읽 기 는 요구 하지 않 습 니 다.
(3)A 의 격 리 단 계 를 repeatable read 로 설정 합 니 다(중복 읽 기 가능)

A:트 랜 잭 션 을 시작 합 니 다.이 때 데이터 가 초기 상태 입 니 다.

B:트 랜 잭 션 을 시작 하고 데 이 터 를 업데이트 하지만 제출 하지 않 습 니 다.

A:데 이 터 를 다시 읽 어 보 니 데이터 가 수정 되 지 않 았 습 니 다.

B:사무 제출

A:데 이 터 를 다시 읽 어 보 니 데이터 가 변 하지 않 았 습 니 다.이것 은 이번에 다시 읽 을 수 있다 는 것 을 의미 합 니 다.

B:새로운 데 이 터 를 삽입 하고 제출 합 니 다.

A:데 이 터 를 다시 읽 어 보 니 데이터 가 변 하지 않 았 습 니 다.반복 해서 읽 을 수 있 지만 최신 데이터 가 아니 라 는 것 을 알 게 되 었 습 니 다.이것 이 바로'환 독'입 니 다.

A:이번 사 무 를 제출 하고 데 이 터 를 다시 읽 어 보 니 정상적으로 읽 혔 습 니 다.

이상 의 실험 을 통 해 결론 을 얻 을 수 있 습 니 다.격 리 단 계 를 반복 해서 읽 을 수 있 습 니 다.제출 한 기록 만 읽 을 수 있 고 한 사무 에서 한 기록 을 두 번 읽 는 동안 다른 사무 부 는 이 기록 을 업데이트 할 수 있 습 니 다.그러나 이 사 무 는 다른 업무 와 직렬 화 를 요구 하지 않 는 다.예 를 들 어 하나의 업무 가 제출 한 업무 가 업 데 이 트 된 기록 을 찾 을 수 있 지만 환 독 문제 가 발생 할 수 있 습 니 다(데이터 베 이 스 는 격 리 단계 의 실현 에 차이 가 있 기 때 문 입 니 다).이상 의 실험 과 같이 데이터 환 독 문제 가 발생 하지 않 았 다.
(4)、A 의 격 리 단 계 를 직렬 화(Serializable)로 설정

A:트 랜 잭 션 을 시작 합 니 다.이 때 데이터 가 초기 상태 입 니 다.

B:B 가 대기 상태 에 들 어간 것 을 발 견 했 습 니 다.그 이 유 는 A 의 업무 가 제출 되 지 않 아서 기다 릴 수 밖 에 없 기 때 문 입 니 다.(이때 B 는 대기 시간 초과 가 발생 할 수 있 습 니 다)

A:제출 사무

B:삽입 성공 발견

serializable 완전 잠 금 필드 입 니 다.같은 데 이 터 를 조회 하려 면 이전 업무 가 완료 되 고 잠 금 이 해 제 될 때 까지 기 다 려 야 합 니 다.완전한 격 리 단계 로 대응 하 는 데이터 표를 잠 그 기 때문에 효율 적 인 문제 가 발생 할 수 있 습 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.

좋은 웹페이지 즐겨찾기