MySQL ‐ Named Lock(네임드 락) - dnwls16071/Backend_Summary GitHub Wiki
📚 MySQL의 Named Lock(네임드 락)
- Named Lock은
GET_LOCK()
함수를 이용해 임의의 문자열에 대해 잠금을 설정할 수 있다.
- 이 잠금의 특징은 대상이 테이블이나 레코드 또는 AUTO_INCREMENT와 같은 데이터베이스 객체가 아니라는 것이다.
- 네임드 락은 단순히 사용자가 지정한 문자열에 대해 획득하고 반납(해제)하는 잠금이다.
출처 : MySQL - Locking Functions
📚 GET_LOCK(str, timeout)
- MySQL의 Named Lock(GET_LOCK())은 락을 식별하기 위해 문자열 매개변수를 사용한다.
- timeout 매개변수는 락을 획득하기 위해 대기할 시간을 지정한다.
- 만약 timeout 값이 음수인 경우 실제로 무한 타임아웃을 의미하며 시간 제약이 따로 없다.
- 이 떄 사용되는 락을 S-Lock이 아닌 X-Lock이다.
- 하나의 세션이 특정 이름의 락을 보유하고 있는 동안 다른 세션은 같은 이름의 락을 획득할 수 없게 된다.
- 락은 문자열 이름으로 식별된다.
1
: 락을 성공적으로 획득했을 때 반환한다.
0
: 타임아웃이 발생했을 때 반환한다.
NULL
: 에러가 발생했을 때 반환한다.
- MySQL의 Named Lock은
RELEASE_LOCK()
함수를 실행하여 명시적으로 락을 해제하거나 세션이 종료되면 암묵적으로 락이 해제된다.
GET_LOCK()
함수를 통해 획득한 락은 트랜잭션이 커밋되거나 롤백될 때 해제되지 않는다.
SELECT GET_LOCK('lock1',10);
SELECT GET_LOCK('lock2',10);
SELECT RELEASE_LOCK('lock2');
SELECT RELEASE_LOCK('lock1');