관리 메뉴

생각해보기

Mysql lock을 알아보자 본문

DB

Mysql lock을 알아보자

정한_s 2023. 11. 18. 19:39

Mysql의 잠금이 무엇이 있는지 확인해보고 싶었습니다.

Mysql에서 사용되는 잠금은 크게 스토리지 엔진 레벨과 Mysql 엔진 레벨로 나눌 수 있습니다.

Mysql 엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미치지만, 스토리지 엔진 레벨의 잠금은 스토리지 엔진 간에 영향을 미치지 않습니다.

 

Mysql 엔진 레벨의 잠금은 다음과 같습니다.

  • 글로벌 락
    Mysql에서 제공하는 락 중에 가장 범위가 큽니다. 한 세션 에서 글로벌 락을 획득하면 다른 세션에서는 조회를 제외하고 락이 해제 될 때 까지 대기 해야 합니다.
  • 테이블 락
    개별 테이블 단위로 설정되는 락입니다. 스키마를 변경하는 DDL의 경우 테이블 락이 설정됩니다
  • 네임드 락
    임의의 문자열에 대해 잠금을 설정할 수 있습니다. 여러 서버를 동기화 해야 하는 동시성 이슈를 극복하는데 사용이 됩니다.
  • 메타데이터 락
    데이터베이스의 이름이나 구조를 변경하는 경우에 획득하는 잠금입니다.

innoDB 스토리지 엔진 잠금은 다음과 같습니다.

  • 레코드 락
    레코드 자체만을 잠그는 락입니다. 다른 상용 DBMS의 레코드 락과 차이점은 innoDB는 레코드 자체를 잠그는 것이 아니라 인덱스의 레코드를 잠급니다. 인덱스가 하나도 없는 테이블이라도 내부적으로 생성된 클러스터 인덱스를 통해 잠금을 설정합니다.
    인덱스의 레코드를 잠근다는 의미는 즉, 변경해야 할 레코드를 찾기 위해 검색한 인덱스의 레코드를 모두 락을 걸어야 한다는 것입니다. 락을 최소화 하기 위해서는 인덱스의 효율을 높여야 합니다. (카디널리티를 높여야 합니다)
  • 갭 락
    레코드 자체가 아니라 레코드와 바로 인접한 레코드 사이의 간격만을 잠그는 것입니다. 갭락의 역할은 레코드와 레코드 사이의 간격에서 새로운 레코드가 생성되는 것을 제어합니다. 갭락이 존재 하기 때문에 innoDB는 REPETABLE READ 격리 수준에서 PHANTOM READ가 일어나지 않습니다.
  • 넥스트 키락
    레코드 락과 갭락을 합쳐 놓은 형태의 락입니다.
  • 자동 증가 락
    자동으로 증가하는 숫자 값을 추출하기 위한 락입니다. Mysql에서 AUTO_INCREMENT라는 칼럼 속성에서 동시성 이슈를 극복하기 위해 사용합니다.

'DB' 카테고리의 다른 글

DB와 index  (0) 2023.12.03
Real MySQL 개요  (0) 2023.10.22
DB 인덱스 기초  (0) 2023.07.14
Comments