잠금 2

Mysql 엔진 Lock

MySql 엔진 lock Mysql 엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미친다. 글로벌 락(Global lock) FLUSH TABLES WITH READ LOCK 위의 명령을 통해 획들 가능한 잠금이다. 글로벌 락의 특징 MySql에서 제공하는 잠금 중 가장 범위가 큰 잠금이다. 해당 락이 활성화되면 전체 테이블/DB가 영향을 받는다. select를 제외한 DDL, DML문장은 글로벌 락이 해제되기 전까지 대기하게 된다. 해당 락은 MySql의 모든 테이블에 잠금을 걸게 된다. 추가적으로, 모든 테이블/DB에 대해 잠금을 걸기 때문에 해당 락 명령 실행 이전에 수행되던 트랜잭션/SQL이 끝날 때까지 대기하게 된다. 참고로 모든 SQL에 대해서이기 때문에 락 대상이 아닌 select 명령도 ..

shared lock, exclusive lock

Shared lock과 Exclusive lock에 관하여 해당 lock들은 DB자체에서 걸어주는 lock으로, InnoDB의 Row-level lock이다. 이거랑 이거랑 이거를 읽고오면 좀더 이해가 쉬울 것이다. 간단히 예를 들어 설명하겠다. 예를 들어 DB에 다음과 같은 데이터가 있다고 가정해 보자 그런데 만약 A는 류찬의 외모를 읽음 B는 류찬의 외모를 잘생김에서 멋짐으로 변경 C는 류찬의 외모를 읽음 한다고 생각해보자. A Transaction에서 류찬의 외모를 가져오는 중(잘생김) B Transaction에서 류찬의 외모를 멋짐으로 변경(멋짐으로 변경) C Transaction에서 류찬의 외모를 가져옴 (멋짐) A Transaction에서 류찬의 외모를 가져옴 (잘생김) 이렇게 되는 이유는, ..