새소식

반응형
DB/RealMySQL8.0

[MySQL] 5장 트랜잭션과 잠금

  • -
반응형

잠금과 트랜잭션은 서로 비슷한 개념 같지만 다르다.

  • 잠금
    • 동시성을 제어하기 위한 기능
    • 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할 
  • 트랜잭션
    • 데이터의 정합성을 보장하기 위한 기능 
    • 격리 수준은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨
    • 범위를 최소화해야 한다. 네트워크 작업이 있는 경우 반드시 트랜잭션에서 배제해야 한다.

 

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

(https://kkang-joo.tistory.com/163)

  • MySQL 엔진은 스토리지 엔진을 제외한 나머지 부분
  • MySQL 엔진 레벨의 잠금은 스토리지 엔진에 영향을 미친다
  • 스토리지 엔진 레벨 잠금은 스토리지 엔진 간 상호 영향을 미치지는 않는다. 

MySQL 엔진 잠금

글로벌 락 

  • FLUSH TABLES WITH LOCK
  • 글로벌 락이 걸리면 다른 세션에서 select를 제외한 대부분의 DDL, DML 문장의 실행이 락이 해제될 때까지 대기해야 한다. 

테이블 락

  • 개별 테이블 단위로 설정되는 잠금
  • LOCK TABLES table_name [ READ | WRITE ]

네임드 락

  • 임의의 문자열에 대해 잠금을 설정
  • GET_LOCK()

메타 데이터 락

  • 데이터베이스 객체의 이름이나 구조를 변경하는 경우에 획득하는 잠금

InnoDB 스토리지 엔진 잠금

레코드 기반의 잠금 방식 

 

레코드 락 - 레코드 자체만을 잠그는 것, InnoDB는 레코드 자체가 아니라 인덱스의 레코드를 잠근다

인덱스가 하나도 없는 테이블이더라도 내부적으로 자동 생성된 클러스터 인덱스를 이용해 잠금을 설정 

 

갭 락 - 레코드 자체가 아니라 레코드와 바로 인접한 레코드 사이의 간격만을 잠그는 것

 

넥스트 키 락 - 레코드 락 + 갭 락

 

자동 증가 락 - AUTO_INCREMENT 락 

트랜잭션과 관계없이 값을 가져오는 순간에만 걸렸다가 즉시 해제된다.

반응형

'DB > RealMySQL8.0' 카테고리의 다른 글

[MySQL] 4장 아키텍처  (0) 2025.01.12
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.