확인하는 방법이 네 가지 특성이 InnoDB의 거래

네 가지 특성 업무

  1. 원 자성 (자성이) : 원자 작업의 불가분의 단위 인 전체 데이터베이스 트랜잭션을 의미합니다. 트랜잭션의 모든 데이터베이스 작업, 모든 성공적으로 제출하거나, 모두 롤백 실패 중 하나.

  2. 일관성 (일관성) : 상태 데이터베이스의 전환은 항상 일관 적으로 일관성있는 상태이다.

  3. 분리 (절연) 트랜잭션을 제출하는 다른 트랜잭션에 표시되지 전에 작업 대상물 각 읽기 및 쓰기 트랜잭션에 대한 트랜잭션 격리 요건, 즉 서로 트랜잭션으로부터 분리 될 수있다.

  4. 영구 (내구성) : 트랜잭션이 커밋되면, 결과는 다운 타임이나 다른 실패, 데이터베이스, 데이터를 복원 할 수 있습니다 경우에도 영구적입니다.

동시 일관성

  1. 수정 손실
  2. 더러운 읽기 : 커밋되지 않은 데이터를 읽을
  3. 비 반복 읽기 : 판독 데이터 전송, 동일한 조건에서, 제 1 및 제 2 판독 값이 다르다.
  4. 팬텀 읽어 동일한 조건에서, 제 1 및 제 2 다르게 기록 판독.

격리 수준

  1. READ UNCOMMITTED (커밋되지 않은 읽기) : 수정, 제출하지 않더라도, 다른 트랜잭션도 볼 수 트랜잭션이다. 뭐든지 잠겨 있지.

  2. 단지 이미 제출 읽을 수있는 거래를 할 수있는 회사 : 읽기 (읽기 커밋)를 COMMITTED. 즉, 기업의 변화는 다른 트랜잭션의 제출에 앞서이 보이지 않는했다. 읽기 자료는 고정되지 않고 데이터 쓰기, 수정하고 모든 잠금을 삭제합니다.

  3. 반복 읽기 (반복 읽기) : 같은 판독 결과 데이터를 동일한 트랜잭션에서 여러 번 확인하는 것은 동일합니다. 데이터 MVCC기구 반복 판독된다.

  4. SERIALIZABLE (직렬화) : 포스 거래 직렬 실행. 모든 작업 플러스 비관적 잠금. 독서 잠금, 플러스 독점 쓰기 잠금을 공유했습니다.

리두 로그

리두 로그 버퍼 메모리 및 재실행 로그 파일을 재실행 로그는 두 부분으로 구성된다.

트랜잭션이 커밋 할 때, 먼저 모든 거래는 지속성에 대한 리두 로그에 기록됩니다 로그인해야합니다. 각 리두 로그 버퍼가 리두 로그 파일을 작성 후, 이노 스토리지 엔진의 요구는 로그가 디스크에 기록 될 수 있도록 fsync를 작동하면 호출 할 수 있습니다. fsync를 작업이 디스크에 의존하기 때문에, 그래서 디스크 성능은 트랜잭션의 성능이 최선을 다하고 있습니다 결정합니다.

리두 로그를 제어하는 ​​데 사용에서 innodb_flush_log_at_trx_commit 매개 변수가 디스크 전략에 플러시. 기본 매개 변수 값은 트랜잭션 커밋 한 번 fsync와 작업을 호출해야합니다, 1입니다. 매개 변수는 트랜잭션 커밋에 대한 리두 로그 작업 0을 작성하고 마스터 스레드에서 초당되면 리두 로그를 작성하기위한, 그리고 fsync를 작업을 수행 할 수 없습니다. 2는 리두 로그 쓰기 트랜잭션에 대한 매개 변수는 로그 파일을 다시 커밋 만 fsync를 작동하지 않고, 캐시에 기록.

취소 로그

거래는 사용자가 수행하거나 문이 어떤 이유로 실패 할 경우, 또는 롤 백 ROLLBACK 문에 대한 요청이있는 사용자는, 당신은 데이터를 롤백 실행 취소 정보를 사용할 수 있는지. 취소의 세그먼트 (세그먼트 취소) 취소 내부 데이터베이스에 저장된다.

InnoDB 스토리지 엔진이 롤백 할 때, 실제로하고있어 이전 작업의 반대입니다. 각 UPDATE를 들어, 역 UPDATE를 수행, 행이 개정 다시 전에 넣어지게된다. INSERT 경우, 수행은 삭제하고, 공감도 마찬가지 부사장. 그래서, 실행 취소 로그는 물리적 복구보다는 논리적이다. 데이터 구조 및 페이지 자체는 롤백 후 상당히 다를 수 있습니다. 그것은 다른 트랜잭션에게 지속적인 작업에 영향을 미칠 것 때문에, 트랜잭션의 시작과 같은 페이지보기로 롤백 할 수 없습니다.

은 InnoDB의 잠금

행 수준 잠금

  • 공유 잠금 (S 잠금, 공유는), 트랜잭션 데이터의 라인을 읽을 수 있습니다
  • 배타적 잠금 (X 잠금, 독점) 업데이트에 대한 거래를 허용하거나 데이터의 행 삭제
    플러스 X 잠금을 객체 트랜잭션 데이터를 읽와 A.를 업데이트 할 수 있습니다 잠금 할 수 없습니다 더하기 어떤 잠금 동안 다른 트랜잭션.

트랜잭션 플러스 S 잠금 데이터 객체는, 판독 동작은 가능하지만, 동작은 업데이트 될 수 없다. 다른 거래시 플러스 S를 잠글 잠글 수 있지만, X 잠금을 추가 할 수 없습니다.

호환 관계

- 엑스 에스
엑스 아니 아니
에스 아니

테이블 수준의 잠금 : 잠금 의도 (의도 잠금)

그들은 단지가 아니라 진정한 잠금보다는 테이블 잠금으로 표현하기를 원하기 때문에 IS는 어떤 / IX 잠금과 호환됩니다.
S 잠금 및 잠금은 IS와 S 잠금은 호환, T는 데이터 행에 원하는 트랜잭션 S 플러스 잠금, 테이블에 잠글 수있는 다른 트랜잭션이 테이블에 S 또는 행을 얻을 수있다.

호환 관계

- 엑스 IX 에스 IS
엑스 아니 아니 아니 아니
IX 아니 아니
에스 아니 아니
IS 아니

일관된 비 잠금 읽기

일관된 비 잠금 읽기 : 기록이 X 잠금에 추가되면,이 기록을 읽는에서 다른 트랜잭션이, InnoDB 스토리지 엔진은 데이터 라인의 스냅 샷을 읽을 수있는 행의 잠금 릴리스가 나올 때까지 기다리는하지 않습니다.

라인 레코드는,이 기술은 일반적으로 기술의 멀티 라인 버전이라보다 데이터의 스냅 샷을보다 가질 수있다. 그 결과 동시성 제어라는 다중 버전 동시성 제어 (다중 버전 동시성 제어, MVCC).

MVCC은 : 데이터베이스 테이블 버전 기반 솔루션의 데이터에 대한 버전 식별자를 추가하고, 일반적으로, "버전"데이터베이스 테이블 필드를 추가함으로써 달성된다. 데이터를 읽을 때 함께이 버전을 읽을 때 업데이트,이 버전 번호 더한 후. 이 때, 데이터가 비교를 위해 기록 된 정보에 해당하는 데이터베이스 테이블 데이터의 현재 버전 버전에 제출되며, 제출 된 데이터는 데이터베이스 테이블의 버전 번호보다 큰 경우, 현재 버전 번호, 데이터가 만료 된 그들, 또는 업데이트.

READ COMMITTED 트랜잭션 격리 수준, 비 균일 성을위한 스냅 샷 데이터는 항상 행을 잠겨 데이터의 스냅 샷을 읽기 최신를 참조하십시오.
REPEATABLE READ 트랜잭션 격리 수준, 비 일관성에 대한 스냅 샷 데이터는 항상 트랜잭션의 데이터 읽기 줄 버전이 시작 읽습니다.

잠금 읽기 일관성

데이터베이스를 잠금에 대한 읽기 작업을 표시합니다.

SELECT ... UPDATE에 대한

SELECT ... LOCK IN 점유율 모드

세 가지 알고리즘 행 잠금

스토리지 엔진 이노 디비, 잠금 알고리즘의 세 행이 있습니다.

  1. 기록 잠금 : 단일 행 기록에 잠금. (인덱스 테이블이 내장하지 않는 경우 암시 적 기본 키 잠금을 사용하여) 인덱스 레코드 잠금
  2. 갭 잠금 : 갭 잠금, 잠금 범위는하지만, 기록 자체가 포함되어 있지 않습니다.
  3. 다음 키 잠금하십시오 갭 잠금 + 기록 잠금, 잠금 범위 및 (전 개폐 섹션 다음에) 잠금 기록 자체.

이노 쿼리를 사용하여 다음 키 잠금은 팬텀 읽기 해결한다.

어떻게 이노 보증 자성 (자성)?

데이터 변경 사항에 트랜잭션에서 실행 취소 로그를 작성하고 데이터를 수정하고, 오류가 발생하면, 스토리지 엔진은 트랜잭션이 시작되기 전에 상태로 복원됩니다 백업 데이터를 기록 취소 사용됩니다.

어떻게 이노 (일관성) 일관성을 보장?

원 자성 및 격리 트랜잭션 데이터 일관성을 보장하기 위해

어떻게 이노 절연 (절연)을 보장하기 위해?

InnoDB는 기본 격리 수준을 REPEATABLE READ + 다음 키 잠금, 발생하지 않습니다 데이터베이스, 동시성 일관성 문제의 분리를 확인하고 SERIALIZABLE 격리 수준보다 이론적으로 더 효율적입니다.

어떻게 지속 (내구성)를 보장 이노?

InnoDB 스토리지 엔진에 관계없이 정상 종료 마지막 여부를 데이터베이스가 시작시에 실행의, 리두 로그로 작업을 다시 시작하려고합니다.

참고 :

추천

출처www.cnblogs.com/lijianming180/p/12409978.html