책너두 6기 15일차

백은빈, 이성욱의 Real MySQL8.0 1권 p.160 ~ p.169

내용정리

05 트랜잭션과 잠금

5.2 MySQL 엔진의 잠금

  • MySQL에서 사용되는 잠금은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다.
  • MySQL 엔진은 서버에서 스토리지 엔진을 제외한 나머지 부분으로 이라 볼 수 있다.

5.2.1 글로벌 락

  • 글로벌 락(GLOBAL LOCK)은 가장 범위가 크다. 한 세션엣 획득하면 다른 세션에서 SELECT를 제외한 대부분의 문장이 대기 상태로 남는다. MySQL 서버 전체에 영향을 미치며 테이블이나 데이터베이스가 달라도 미친다.
  • Xtrabackup이나 Enterprise Backup 과 같은 백업 락: 조금 더 가벼운 글로벌 락. 일반적인 테이블의 데이터 변경은 허용된다.

5.2.2 테이블 락

  • 테이블 락(Table Lock)은 ㄱ별적인 테이블 단위로 설정되는 잠금. 명시적 또는 묵시적으로 획득할 수 있다.

5.2.3 네임드 락

  • 네임드 락(Named Lock)은 GET_LOCK()함수를 이용해 임의의 문자열에 대해 잠금을 설정할 수 있다.
  • 단순히 사용자가 지정한 문자열(String)에 대해 획득하고 반납(해제)하는 잠금이다.

5.2.4 메타데이터 락

  • 메타데이터 락(Metadata Lock)은 데이터베이스 객체(테이블이나 뷰 등)의 이름이나 구조를 변경하는 경우에 획득하는 잠금이다.
  • 명시적으로 획득하거나 해제하지 않는다.
  • 테이블의 이름을 변경하는 경우 자동으로 획득하는 잠금

5.3 InnoDB 스토리지 엔진 잠금

5.3.1 InnoDB 스토리지 엔진의 잠금

  • 잠금 정보가 상당히 작은 공간으로 관리되기 때문에 레코드락 -> 페이지락 or 테이블락 으로 레벨업 되는 경우(락 에스컬레이션)는 없다.
5.3.1.1 레코드 락
  • 레코드 자체만을 잠그는 것(Reocord lock, Record only lock)이라고 한다. 다른 상용 DBMS의 레코드 락과 동일한 역할을 한다.
5.3.1.2 갭 락
  • 갭 락(Gap lcok)은 레코드 자체가 아니라 레코드와의 바로 인접한 레코드 사이의 간격만을 잠그는 것을 의미한다.
  • 레코드와 레코드 사이의 간격에 새로운 레코드가 생성(Insert)되는 것을 의미한다.
5.3.1.3 넥스트 키 락
  • 레코드락과 갭 락을 합쳐 놓은 형태가 넥스트 키 락(Next key lock)이라고 한다.
5.3.1.4 자동 증가 락

읽고 나서

다양한 Lock의 종류가 있다. 알아는 두자