-
Mysql Lock이란?Database/Mysql 2023. 2. 6. 00:11
Lock 이란?
리소스로의 접근 경쟁을 제어하기 위한 잠금 장치이다. 메모리로 접근할 수 있는 문을 잠궈서(lock을 걸어서) 스레드가 메모리로 접근하지 못하게 하거나 (운영체제 관점) DB 데이터에 접근할 수 있는 문을 잠궈서(lock을 걸어서) 트랜잭션이 데이터에 접근하지 못하게 하는 (DB 관점) 등 리소스를 보호하기 위한 다양한 경우에 사용하는 상호배제를 위한 '개념'이다. 이 개념은 뮤텍스나 세마포어 등 다양한 형태로 구현된다.
Mysql에서의 Lock 종류
공유 잠금(Shared lock, 일명 s lock)
- 한 트랜잭션이 특정 데이터에 lock을 걸어도 다른 트랜잭션에서 그 데이터에 읽기 접근은 가능하다. 쓰기 등 다른 접근은 불가능하다.
- read lock이라고도 불륀다. (개인적으로는 readable lock이 명확한 명칭인 것 같다.)
배타 잠금(eXclusive lock, 일명 x lock)
- 한 트랜잭션이 특정 데이터에 lock을 걸면 다른 트랜잭션에서 어떠한 형태로도 그 데이터에 접근하는 것이 불가능하다.
- write lock이라고도 불륀다. (개인적으로는 unreadable lock이 명확한 것 같다.)
Mysql Lock 적용
열(row)
- row 단위로 s lock 또는 x lock을 적용한다.
- s lock 적용 명령어: select lock in share mode
- x lock 적용 명령어: select for update
열(record)
- row의 index를 단위로 s lock 또는 x lock을 적용한다.
- 해당 row에 index가 생성되어 있지 않으면 테이블 생성 시 함께 생성되는 default clustered index에 lock을 적용한다.
- s lock 적용 명령어: select lock in share mode
- x lock 적용 명령어: select for update
열 범위(gap)
- row의 index gap 단위로 s lock 또는 x lock을 적용한다.
- where 절 내 범위에 해당하는 index 모두에 lock을 적용한다.
- dead lock의 주범이다.
열 + 열 범위(next key)
- record lock과 gap lock이 동시에 적용
테이블(table)
- table 단위로 s lock 또는 x lock을 적용한다.
- s lock 적용 명령어: lock table read
- x lock 적용 명령어: lock table write
'Database > Mysql' 카테고리의 다른 글
DB Transaction (0) 2021.07.17 MyISAM vs InnoDB (링크) (0) 2021.06.23 댓글