2023. 11. 25. 23:20ㆍ스터디/real MySql 스터디
Lock
같은 데이터를 동시에 접근하는 상황을 방지하기 위해 접근 한 곳, 혹은 허용되는 수만 접근 되도록 설정하는 것.
데이터의 무결성과 일관성을 지키기 위해 사용
Lock 종류는 다음과 같다
Shared Lock - 공유락
데이터를 변경하지 않는 읽기 명령에 주어진다.
여러 사용자가 동시에 데이터를 읽어도 데이터 일관성에는 아무런 영향을 주지 않는다.
따라서, 공유 락 끼리는 동시 접근이 가능하다.
Exclusive Lock - 베타 락
데이터에 변경을 가하는 명령에 주어지는 락이다. Write Lock으로도 불린다.
다른 세션이 해당 자원에 접근(Select, Insert, update, delete...)를 막는다.
베타 락은 트랜젝션 동안 유지된다.
Update Lock - 업데이트 락
배타 락을 걸기 전 데드락을 방지하기 위해 사용되는 락이다.
일반적으로 Update쿼리의 where절이 실행되는 과정에서 적용된다.
가끔 읽기 쿼리 이후 업데이트 쿼리를 적용하는 경우 컨비전 데드락(공유 잠금에서 단독 잠금으로 변경 시 발생)하는데,
이를 막기위해 일부 select 쿼리에서도 업데이트 락을 걸기도 한다.
Intent Lock - 내재 락
사용자가 요청한 범위에 대한 락을 걸 수 있는지 여부를 빠르게 파악하기 위해 사용
락을 거는 시점에 상위 객체들(페이지, 테이블) 에 대한 내재 락을 걸어 다른 사용자가 더 큰 범위 자원에 대해 락을 걸 수 있는지 여부를 빠르게 파악할 수 있도록 한다.
따라서 락 생성 시 상위 객체에 대한 내재락을 생성한다. 모든 row에 락을 생성하는 대신, 더 상위 객체 테이블에만 락을 걸어 메모리 사용을 최적화한다. 이를 Lock Escalation이라 한다
'스터디 > real MySql 스터디' 카테고리의 다른 글
Mysql 아키텍처 (1) | 2023.11.26 |
---|---|
Index 인덱스 (1) | 2023.11.26 |
DB isolation level (격리수준) (1) | 2023.11.25 |