InnoDB 자물쇠

4596 단어 mysql총결산
자 물 쇠 는 InnoDB 가 업무 격 리 성 을 보장 하 는 중요 한 수단 으로 각 저장 엔진 과 DB 의 자물쇠 의 실현 이 다르다.
  • MySql 에서 MyISAM 은 시계 자 물 쇠 를 사용 하고 InnoDB 는 줄 자 물 쇠 를 기반 으로 한다.
  • Sql Server 2005 는 낙관적 인 자물쇠 와 비관 적 인 자물쇠 의 병발 을 지원 합 니 다.
  • InnoDB 는 Oracle 과 유사 한 일치 성 비 잠 금 읽 기와 줄 잠 금 을 제공 합 니 다.

  • Lock 과 Latch
    latch 는 경량급 자물쇠 로 빗장 자물쇠 라 고 합 니 다.latch 는 자바 의 synchronize 와 유사 하지만 Lock 은 더욱 거시적인 것 입 니 다.latch 는 프로그램 적 제어,제어 프로그램의 논리 라 고 볼 수 있 지만 lock 은 데이터 에 대한 보호 입 니 다.
    Lock
    Latch
    대상
    사무.
    보호 하 다.
    데이터베이스 내용
    지속 시간
    전체 사무 과정
    패턴
    행 자물쇠,시계 자물쇠,의향 자물쇠
    잠 금 처리
    wait-for graph,time out 등 진법 으로 처리 합 니 다.
    존재 위치
    Lock Manager 의 해시 표 중
    InnoDB 의 자물쇠
    이 노 DB 는 두 개의 표준 자 물 쇠 를 실 현 했 는데 이 두 자 물 쇠 는 줄 디자인 을 바탕 으로 한 것 이다.
  • 공유 자물쇠:S Lock,row 데이터 공 유 를 허용 하 는 read;
  • 배타 자물쇠:X Lock,row 데이터 update,delete 를 허용 하지만 독점 적 입 니 다.

  • 의향 자물쇠:InnoDB 가 실현 하 는 특수 한 시계 자 물 쇠 는 다음 에 얻 을 자물쇠 의 유형 을 밝 히 고 의향 자 물 쇠 는 다음 과 같은 두 가지 로 나 뉜 다.
  • IX:의향 배타 적 자물쇠;
  • IS:의향 공유 자물쇠;
  • 의향 자 물 쇠 는 전체 표 스 캔 을 제외 한 어떠한 요청 도 막 지 않 습 니 다.

  • 잠 금 관련 Sql
    #         
    show engine innodb status;
    
    #      
    show full processlist;
    
    #   schema   
    select * from information_schema.INNODB_TRX \G

    일치 성 비 잠 금 읽 기
    InnoDB 의 읽 기 정책 은 데 이 터 를 읽 을 때 잠 금 을 추가 하지 않 고 X 잠 금 이 풀 리 기 를 기다 리 지 않 아 도 데 이 터 를 읽 을 수 있 습 니 다.이 때 는 데이터 스냅 샷 버 전 을 읽 습 니 다.모든 데 이 터 는 동시 다발 적 인 업무 가 다 르 기 때문에 여러 개의 스냅 샷 데이터 가 존재 할 수 있 습 니 다.이것 이 바로 여러 버 전의 스냅 샷 입 니 다.
    InnoDB 는 다 중 버 전의 스냅 샷 병행 제어 기술 인 MVVC 기술 로 데 이 터 를 읽 는 스냅 샷 버 전 을 제어 합 니 다.MVVC 기술 도 이 노 DB 가 비 잠 금 판독 을 실현 하 는 핵심 기술 이다.
    격 리 단계 에 따라 스냅 샷 버 전의 확인 방식 이 다 릅 니 다.InnoDB 는 다음 두 단계 에서 비 잠 금 읽 기 기술 을 사용 합 니 다.데이터 스냅 샷 버 전 확인 방식 은 다음 과 같 습 니 다.
  • read committed:제출 된 단 계 를 읽 고 최신 스냅 샷 버 전 을 읽 습 니 다.
  • repeatable read:읽 기 단 계 를 반복 하여 트 랜 잭 션 시작 시의 스냅 샷 버 전 을 읽 을 수 있 습 니 다.

  • MVVC 기술 에서 데이터 스냅 샷 버 전 을 확정 할 때 사무 번 호 를 통과 하기 때문에 사무 번 호 는 관건 입 니 다!
    잠 금 추가 Sql 보이 기
    InnoDB 는 잠 금 문 구 를 표시 하 는 것 을 지원 하 며,Select 에 키 문 구 를 추가 하면 X 와 S 자 물 쇠 를 추가 할 수 있다.이 문구 들 은 Sql 표준 이 아 닌 InnoDB 특유 의 것 이다.
    #Select     :
    #  X ;
    select ... for update;
    
    #  S ;
    select ... lock in share mode;

    자동 성장 필드 와 잠 금
    InnoDB 자체 성장 알고리즘 은 두 가지 모델 이 있 는데 하 나 는 경량급 상호 배척 량 이 고 하 나 는 시계 자물쇠 이 며 MyISAM 은 전체 시계 자 물 쇠 를 사용한다.
    InnoDB 에서 증가 하 는 열 은 색인 의 첫 번 째 열 이 어야 하고 색인 이 어야 합 니 다.
    외 키 와 자물쇠
    InnoDB 는 자동 으로 외부 키 에 색인 을 추가 합 니 다.이것 은 시계 자 물 쇠 를 피 할 수 있 습 니 다.외부 키 가 있 으 면 InnoDB 는 Insert 에 있 을 때 부모 표 데 이 터 를 check 합 니 다.이것 은 부모 표 의 암시 적 인 select 작업 이 있 습 니 다.이 select 는 일치 성 비 잠 금 읽 기 를 사용 하지 않 고 Select id from parent 를 사용 합 니 다.table in lock share model,즉 S 자 물 쇠 를 주동 적 으로 추가 합 니 다.따라서 외부 키 는 데이터 의 완전 성 을 보장 할 수 있 지만 성능 위험 도 있다.
    잠 금 알고리즘
    InnoDB 는 세 가지 줄 잠 금 알고리즘 이 있 습 니 다.
  • Record Lock:한 줄 로 잠 금;
  • Grap Lock:간극 잠 금,한 범 위 를 잠 그 지만 자 체 를 잠 그 지 않 고 잠 금 범 위 는 열 린 구간 입 니 다.
  • Next-Key Lock:잠 금 범 위 는 자 체 를 포함 하고 잠 금 범 위 는 닫 힌 구간 입 니 다.

  • 이 세 종류의 자 물 쇠 는 서로 다른 사무 격 리 단계 에서 사용 하지 마라.예 를 들 어 InnoDB 가 Nex-Key Lock 알고리즘 을 통 해 범위 데 이 터 를 잠 그 면 환 독 을 피 할 수 있 습 니 다.
    필드 가 유일한 색인 이 라면 Next-Key Lock 은 Record Lock 으로 강 등 될 수 있 습 니 다.
    자물쇠 가 가 져 온 문제
    잠 금 은 데이터베이스 업 무 를 잘 지원 하고 업무 의 격 리 성 을 확보 할 수 있 지만 잠 금 의 부정 확 한 사용 도 문 제 를 가 져 올 수 있 습 니 다.업무 의 격 리 단계 에서 각 격 리 단계 에 어느 정도 문제 가 있 는데 이것 이 바로 자물쇠 가 가 져 온 것 이다.
  • read-nfocked 단계 에서 자 물 쇠 를 사용 하지 않 았 기 때문에 더러 운 읽 기 문제 가 발생 할 수 있 습 니 다.
  • read committed 단계 에서 Record Lock 전략 을 사용 하지만 범위 에 자 물 쇠 를 추가 하지 않 았 기 때문에 환 독 과 중복 읽 을 수 없 는 문제 가 있 습 니 다.
  • repeatable read 단계 에서 Next-Key Lock 전략 을 사용 하기 때문에 더러 운 읽 기와 환 독 을 없 앨 수 있 지만 효율 적 인 문제 가 있 습 니까?

  • 다음-키 잠 금:InnoDB 환 독 전략 해결
    환 독 간단 한 설명 은 하나의 사 무 를 두 번 읽 을 때 서로 다른 줄 수 를 읽 는 것 이다.환 독 과 재 독 할 수 없 는 차이 점 은 중복 읽 을 수 없 는 것 은 같은 데이터 줄 을 두 번 읽 는 것 이 고 데이터 줄 의 내용 은 update 가 발생 하지만 환 독 은 insert 와 delete 에서 많이 발생 한 다 는 것 이다.
    InnoDB 는 Next-Key Lock 알고리즘 을 Repeatable Read 의 잠 금 정책 으로 사용 하 는데 이런 방식 으로 범 위 를 잠 그 고 업무 격 리 성 을 확보한다.Read Committed 는 Record Lock 을 잠 금 정책 으로 사용 하여 트 랜 잭 션 격 리 성 을 보장 할 수 없습니다.

    좋은 웹페이지 즐겨찾기