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');