DB Lock

2023. 11. 25. 23:20스터디/real MySql 스터디

728x90

Lock

같은 데이터를 동시에 접근하는 상황을 방지하기 위해 접근 한 곳, 혹은 허용되는 수만 접근 되도록 설정하는 것.

데이터의 무결성과 일관성을 지키기 위해 사용

 

Lock 종류는 다음과 같다

 

Shared Lock - 공유락

데이터를 변경하지 않는 읽기 명령에 주어진다.

여러 사용자가 동시에 데이터를 읽어도 데이터 일관성에는 아무런 영향을 주지 않는다.

따라서, 공유 락 끼리는 동시 접근이 가능하다. 

 

Exclusive Lock - 베타 락

데이터에 변경을 가하는 명령에 주어지는 락이다. Write Lock으로도 불린다. 

다른 세션이 해당 자원에 접근(Select, Insert, update, delete...)를 막는다.

베타 락은 트랜젝션 동안 유지된다.

 

Update Lock - 업데이트 락

배타 락을 걸기 전 데드락을 방지하기 위해 사용되는 락이다.

일반적으로 Update쿼리의 where절이 실행되는 과정에서 적용된다.

 

가끔 읽기 쿼리 이후 업데이트 쿼리를 적용하는 경우 컨비전 데드락(공유 잠금에서 단독 잠금으로 변경 시 발생)하는데,

이를 막기위해 일부 select 쿼리에서도 업데이트 락을 걸기도 한다.

 

Intent Lock - 내재 락

사용자가 요청한 범위에 대한 락을 걸 수 있는지 여부를 빠르게 파악하기 위해 사용

락을 거는 시점에 상위 객체들(페이지, 테이블) 에 대한 내재 락을 걸어 다른 사용자가 더 큰 범위 자원에 대해 락을 걸 수 있는지 여부를 빠르게 파악할 수 있도록 한다.

따라서 락 생성 시  상위 객체에 대한 내재락을 생성한다. 모든 row에 락을 생성하는 대신, 더 상위 객체 테이블에만 락을 걸어 메모리 사용을 최적화한다. 이를 Lock Escalation이라 한다

728x90

'스터디 > real MySql 스터디' 카테고리의 다른 글

Mysql 아키텍처  (1) 2023.11.26
Index 인덱스  (1) 2023.11.26
DB isolation level (격리수준)  (1) 2023.11.25