지식 데이터베이스의 인터뷰 요약

데이터베이스 잠금 모듈

관련 인의 MyISAM과 InnoDB의 차이에 대한 어떤 고정?

  • 의 MyISAM 테이블 수준 잠금의 기본 사용하는 것입니다, 행 수준 잠금 (지원되지 않는 행만이 운영하는 잠 깁니다 데이터베이스의 작동시 )
  • InnoDB는 행 수준 잠금을 사용하여 기본이며, 또한 (테이블 수준 잠금을 지원 전체 테이블을 잠급니다 데이터베이스의 작동 )
  • 의 MyISAM은 트랜잭션을 지원하지 않습니다
  • InnoDB는 트랜잭션을 지원합니다

테이블 수준 잠금 색인 데이터베이스 작업을 복용하지 않을 때 사용된다

의 MyISAM

때 업데이트, 삽입, 자동으로 테이블 수준의 쓰기 잠금을 추가합니다 삭제 작업을,이 엔진에서 데이터 선택 작업은 테이블의 테이블 수준의 읽기 잠금을 추가 할 때 테이블 잠금을 추가로 설정됩니다.

적용 현장

  • 행의 수는 자주 전체 테이블 카운트 문을 수행의 MyISAM은 전체 테이블을 보유 할 변수가있다
  • 데이터 주파수에 추가 및 삭제 (추가 및 삭제 동작 잠금 테이블을 포함 할 것 같은) 높지 매우 자주 질의
  • 어떤 트랜잭션 장면 없습니다

이노

는 동일하지만 행의 행동, 행 수준 잠금 효과의 다른 범위가 잠겨의이 엔진에서 테이블 수준 잠금에 기본 행 잠금, 공유 및 독점 행 수준 잠금 사용됩니다.

적용 현장

  • 데이터 CRUD은 매우 빈번하다
  • 높은 신뢰성 요구 사항, 요구하는 지원 서비스

데이터베이스 잠금 분류

잠금 읽기

잠금이로도 알려져 읽기 공유 잠금 다른 세션을 차단하지 않고 데이터베이스에 하나 개의 세션이 읽기 작업을 읽을 수 있기 때문에,하지만, 쓰기 작업을 다른 세션을 차단합니다.

위로 선택 운전 중 플러스 업데이트에 대한 공유 잠금을 추가합니다 배타적 잠금 플러스 공유 모드 잠금을 추가합니다

쓰기 잠금

잠금을 기록하는 것은로도 알려져 단독 잠금 세션이 읽기 및 쓰기 작업의 다른 모든 세션을 차단 기입 락 후 데이터베이스에 추가됩니다.

추가 읽기 / 쓰기 잠금

테이블을 잠글 TABLE_NAME 읽기 / 쓰기;

잠금 해제 테이블을 삭제

페이지 수준 잠금

표와 행 레벨 잠금 사이 로크 데이터의 운전 데이터에 인접한 위치

의도 잠금

트랜잭션 잠긴 테이블 행, 트랜잭션 B는 전체 테이블에 쓰기 잠금을 적용 할 경우 때 응용 프로그램이이 B를하게됩니다 성공하고 A가 발생하면,이, 행 잠금이 추가 된 트랜잭션 데이터 행하기 때문이다 충돌. 트랜잭션 B 잠금 전류 분포 테이블 데이터베이스 테이블을 결정해야 할 때 그 때문에, 광고 또는 다른 트랜잭션 테이블 잠금 통해인가되지 않은, 그것은 다음과 같이 결정되어야 :

1 : 테이블 테이블 잠금 테이블 다른 트랜잭션에 의해 사용되고 있는지 여부를 결정

2 : 심판의 테이블 행 잠금에 잠겨있는 라인이있다.

이 경우, 전체 테이블이 2 단계에서 기록 결정되어야에서는 효율이 비교적 낮다. 그런 다음 잠금 처음 의도 잠금, 의도 잠금을 획득해야하기 전에 의도 잠금, 테이블에 트랜잭션 또는 행의 존재에 고정하는 의도가, 위의 검사 과정이된다 :

1 : 변경 없음

2 : 의도 잠금 테이블을 얻을

잠금 작업을 적용 할 의도는 전체 데이터베이스가 데이터베이스가 자동으로 트랜잭션이 고정되었을 때, 우리는 코드를 사용하여 프로그래머를 적용 할 필요가 없습니다 의도 테이블 잠금을 신청할 것이다

비관적 잠금

우리는 데이터베이스에있는 데이터의 조각하고자 할 때 같은 시간을 피하기 위해 수정 될 수는 다른 사람에 의해 수정 될, 가장 좋은 방법은 동시 방지하기 위해 잠금 데이터를 직접하는 것입니다. 이 데이터를 수정하기 전에 잠근 다음 방법은 비관적 동시성 제어라고 수정, 데이터베이스 잠금 장치를 의미한다.

낙관적 잠금

잠금이 비관적 잠금의 측면에서 상대적으로 낙관적 인 경우, 낙관적 잠금은 데이터가 일반적으로 수익을 충돌을 야기하므로 발견하는 경우 충돌을 감지하는 형식 충돌 여부 데이터 전에 업데이트 된 데이터를 제출하지 않을 것이라는 가정 사용자가 무엇을 결정할 수 있도록 사용자에게 메시지를 오류가 발생했습니다.

ACID 트랜잭션

원 자성 (자성이) : 트랜잭션이 작업 작업의 불가분의 단위가 발생하거나 발생하지 않는 하나의 트랜잭션에에 의미

일관성 (일관성) : 일관성이 있어야 이전과 거래 후 데이터의 무결성, 그것은 에너지 보존 법칙에 비교 될 수있다

격리 (격리) 동시 트랜잭션들 간의 분리를 위해, 데이터베이스로의 동시 액세스는 각 사용자 트랜잭션 개방 조작 데이터베이스가 다른 트랜잭션에 의해 방해되지 않고 복수의 사용자를 의미

(내구성) 영구 : 트랜잭션이 커밋되면, 그가 영구적 인 데이터베이스에서 데이터를 변경한다는 것을 의미, 데이터베이스 실패가 그들에 영향을 미치지 않습니다 경우에도

트랜잭션 격리 수준 아래의 모든 수준에서 동시 액세스 문제

보기 대화 트랜잭션 격리 수준select @@tx_isolation

설정 세션의 격리 수준set session transaction isolation level read uncommitted

보안 높은 트랜잭션 격리 수준이 높을수록 더 심각한 직렬화 된 실행은 동시성 데이터베이스를 줄일 수 있습니다. 오라클의 기본은 읽기 최선을 다하고 있습니다, MySQL의 기본은 REPEATABLE-READ입니다

트랜잭션에 의해 어떻게 방지 할 수있는 원인이 동시 액세스 문제

데이터베이스 트랜잭션 격리 수준의 모든 측면 1. 업데이트 손실 -MySQL 다시 방지 할 수 있습니다

다른 트랜잭션 업데이트로 덮여 거래를 업데이트, 현재 주류 데이터베이스 잠금이 누락 된 업데이트를 방지하기 위해 이니셔티브를 취할 것입니다.

2. 더러운 방지하기 위해 더 - 읽기 - 커밋 된 트랜잭션 격리 수준을 읽기

트랜잭션은 다른 커밋되지 않은 트랜잭션의 업데이트 데이터를 읽고

더 -REPEATABLE-READ 트랜잭션 격리 수준을 피할 수 읽기 3. 비 반복

여러 읽기 작업 결과의 불일치를 반환

4. 팬텀 읽기 트랜잭션 격리 수준은 피할 수 -SERIALIZALE

판독 라인 트랜잭션 복수의 검색 조건과 일치하는, 트랜잭션 B가 결실 또는 삽입의 결과로 변경 트랜잭션을 설정할

팬텀을 방지하는 방법에 InnoDB의 반복 읽기 격리 수준 읽기

외관 : 읽기 스냅 샷 (비 차단 읽기) - 의사 MVCC를

현재 읽기

플러스 CRUD 문 잠금은 ... 공유 모드 잠금, 업데이트 ... 선택, 업데이트, 삭제, 삽입을 선택

스냅 샷 읽기 (SERIALIZALE에서 격리 수준이 설정 될 수 있습니다)

풀린다 비 차단 판독 선택, 동시 실행, 낮은 오버 헤드의 능력을 강화, 데이터 판독이되지 않을 수도 현재 버전

내부 : 다음 키 잠금 (라인 잠금 잠금 + 간격)

기본 키 인덱스 또는 고유 인덱스 간격으로 잠 깁니다

  • 모든 안타, 당신은 갭 잠금을 사용하지 않습니다 조건, 잠금에만 레코드를 추가 할 경우
  • 일부 또는 모든 미스 히트, 잠금 간격을 추가 할 실행 조건

추천

출처www.cnblogs.com/sasworld/p/11517707.html