MySQL에서는 여러 종류의 잠금(Lock)이 있습니다.
잠금은 데이터베이스에서 동시성을 관리하고 여러 트랜잭션 간의 충돌을 방지하기 위해 사용됩니다.
다음은 MySQL에서 주로 사용되는 잠금의 종류와 각 잠금 종류별로 발생 가능한 시나리오입니다
- 공유 잠금(Shared Lock):
- 설명: 여러 트랜잭션이 동시에 데이터를 읽을 수 있도록 하는 잠금.
- 발생 가능한 시나리오: 여러 트랜잭션이 동일한 데이터를 동시에 읽는 경우.
- 배타적 잠금(Exclusive Lock):
- 설명: 트랜잭션이 데이터를 읽거나 쓰기 위해 특정 데이터에 독점적으로 접근하는 잠금.
- 발생 가능한 시나리오: 트랜잭션이 데이터를 수정하거나 삭제하는 경우.
- 읽기 잠금(Read Lock) 및 쓰기 잠금(Write Lock):
- 설명: InnoDB 스토리지 엔진에서 사용되는 잠금 유형으로, 읽기 잠금은 여러 트랜잭션이 동시에 동일한 데이터를 읽을 수 있게 하고, 쓰기 잠금은 특정 데이터에 대한 읽기 및 쓰기 작업을 독점적으로 허용하는 잠금.
- 발생 가능한 시나리오: 여러 트랜잭션이 동시에 동일한 데이터를 읽는 경우에는 읽기 잠금, 특정 데이터를 수정하거나 삭제하는 경우에는 쓰기 잠금.
- 메타데이터 잠금(Metadata Lock):
- 설명: 데이터베이스 객체(테이블, 인덱스 등)의 구조를 변경하려는 트랜잭션 간에 발생하는 잠금.
- 발생 가능한 시나리오: 특정 트랜잭션이 데이터베이스 객체를 생성, 수정 또는 삭제하는 경우.
- 페이지 잠금(Page Lock):
- 설명: 데이터베이스 스토리지 엔진에서 사용되며, 페이지 단위로 데이터를 읽거나 쓰기 위해 사용되는 잠금.
- 발생 가능한 시나리오: 트랜잭션이 페이지에 대한 읽기 또는 쓰기 작업을 수행하는 경우.
- 행 잠금(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 |