Mysql & Maria/admin

Mysql lock 종류

dbavayne 2023. 11. 26. 17:25

MySQL에서는 여러 종류의 잠금(Lock)이 있습니다.

잠금은 데이터베이스에서 동시성을 관리하고 여러 트랜잭션 간의 충돌을 방지하기 위해 사용됩니다.

다음은 MySQL에서 주로 사용되는 잠금의 종류와 각 잠금 종류별로 발생 가능한 시나리오입니다

 

 

  1. 공유 잠금(Shared Lock):
    • 설명: 여러 트랜잭션이 동시에 데이터를 읽을 수 있도록 하는 잠금.
    • 발생 가능한 시나리오: 여러 트랜잭션이 동일한 데이터를 동시에 읽는 경우.
  2. 배타적 잠금(Exclusive Lock):
    • 설명: 트랜잭션이 데이터를 읽거나 쓰기 위해 특정 데이터에 독점적으로 접근하는 잠금.
    • 발생 가능한 시나리오: 트랜잭션이 데이터를 수정하거나 삭제하는 경우.
  3. 읽기 잠금(Read Lock) 및 쓰기 잠금(Write Lock):
    • 설명: InnoDB 스토리지 엔진에서 사용되는 잠금 유형으로, 읽기 잠금은 여러 트랜잭션이 동시에 동일한 데이터를 읽을 수 있게 하고, 쓰기 잠금은 특정 데이터에 대한 읽기 및 쓰기 작업을 독점적으로 허용하는 잠금.
    • 발생 가능한 시나리오: 여러 트랜잭션이 동시에 동일한 데이터를 읽는 경우에는 읽기 잠금, 특정 데이터를 수정하거나 삭제하는 경우에는 쓰기 잠금.
  4. 메타데이터 잠금(Metadata Lock):
    • 설명: 데이터베이스 객체(테이블, 인덱스 등)의 구조를 변경하려는 트랜잭션 간에 발생하는 잠금.
    • 발생 가능한 시나리오: 특정 트랜잭션이 데이터베이스 객체를 생성, 수정 또는 삭제하는 경우.
  5. 페이지 잠금(Page Lock):
    • 설명: 데이터베이스 스토리지 엔진에서 사용되며, 페이지 단위로 데이터를 읽거나 쓰기 위해 사용되는 잠금.
    • 발생 가능한 시나리오: 트랜잭션이 페이지에 대한 읽기 또는 쓰기 작업을 수행하는 경우.
  6. 행 잠금(Row Lock):
    • 설명: 데이터베이스의 특정 행에 대한 읽기 또는 쓰기 작업을 독점적으로 수행하기 위한 잠금.
    • 발생 가능한 시나리오: 특정 트랜잭션이 데이터베이스 특정 행을 수정하거나 삭제하는 경우.

performance_schema.metadata_locks 테이블에서 lock_type에 대한 내용 정리

 

INTENTION_EXCLUSIVE (의도적 배타적 잠금) 트랜잭션이 나중에 해당 데이터에 대한 "배타적" 잠금을 요청할 것임을 나타냅니다. 다른 트랜잭션이 동시에 동일한 데이터에 배타적 잠금을 설정하지 못하게 합니다.
SHARED (공유 잠금)   여러 트랜잭션이 동시에 데이터를 읽을 수 있도록 하는 잠금입니다. 읽기 작업을 동시에 수행할 수 있게 하지만 쓰기 작업은 하나의 트랜잭션만이 수행할 수 있습니다.
SHARED_HIGH_PRIO (우선순위가 높은 공유 잠금)   일반적인 공유 잠금보다 더 높은 우선순위를 가진 잠금입니다. 이 잠금을 요청한 트랜잭션이 다른 트랜잭션보다 더 높은 우선순위를 가집니다.
SHARED_READ (읽기 공유 잠금)   데이터를 읽기 위한 공유 잠금. 다른 트랜잭션도 읽기 잠금을 얻을 수 있습니다.
SHARED_WRITE (쓰기 공유 잠금)   데이터를 쓰기 위한 공유 잠금. 여러 트랜잭션에서 동시에 읽기는 허용되지만, 쓰기 작업은 하나의 트랜잭션만이 수행할 수 있습니다.
SHARED_UPGRADABLE (업그레이드 가능한 공유 잠금)   현재는 읽기 작업만 수행하고 있지만, 나중에 쓰기 작업을 수행할 것임을 나타냅니다.
SHARED_NO_WRITE (쓰기 금지 공유 잠금)   쓰기 작업을 수행할 수 없는 공유 잠금. 읽기는 여러 트랜잭션이 동시에 수행할 수 있습니다.
SHARED_NO_READ_WRITE (읽기 및 쓰기 금지 공유 잠금)   읽기 및 쓰기 작업을 모두 수행할 수 없는 공유 잠금.
EXCLUSIVE (배타적 잠금) 특정 데이터에 대한 독점적인 읽기 및 쓰기 잠금. 다른 트랜잭션은 동시에 해당 데이터에 대한 배타적인 잠금을 얻을 수 없습니다.

'Mysql & Maria > admin' 카테고리의 다른 글

트랜잭션 격리수준  (1) 2023.11.29
root 비밀 번호 분실시  (0) 2023.11.28
mysql lock 발생 테스트  (1) 2023.11.26
mysql 성능 I/O 읽기/쓰기 관련 측정  (0) 2023.11.02
full text index  (1) 2023.09.07