본문 바로가기
database/mysql

[MySQL] User Level Lock (GET_LOCK, RELEASE_LOCK)

by moonsiri 2021. 11. 5.
728x90
반응형

MySQL에서 GET_LOCK과 RELEASE_LOCK으로 분산 락을 구현할 수 있습니다.

GET_LOCK(str, timeout) Get a named lock
문자열 str에 해당하는 Lock을 획득하는 메소드
 · return 1 - Lock 획득 성공
 · return 0 - timeout 동안 Lock 획득 못한 경우
 · return null - 에러 발생
IS_FREE_LOCK(str) Whether the named lock is free
문자열 str을 사용할 수 있는 상태인지 체크
 · return 1 - Lock이 비어있는 경우
 · return 0 - Lock이 비어있지 않은 경우
IS_USED_LOCK(str) Whether the named lock is in use; return connection identifier if true
문자열 str이 사용되고 있는지 체크
 · return connection identifier - 사용중
 · return null - 미사용중
RELEASE_ALL_LOCKS() Release all current named locks
모든 Lock 해제. 해제된 lock 개수 return
RELEASE_LOCK(str) Release the named lock
문자열 str에 해당하는 Lock 해제
 · return 1 - Lock 해제
 · return null - 해제할 Lock 없음

 

MySql 5.7부터 하나의 세션에서 연속으로 동일한 Lock 이름으로 잡으면 그 횟수만큼 중복으로 Lock이 잡힌다.

-- lock 1
SELECT GET_LOCK('session key', 1);	-- 1
SELECT IS_FREE_LOCK('session key');	-- 0
-- lock 2
SELECT GET_LOCK('session key', 1);	-- 1
SELECT IS_FREE_LOCK('session key');	-- 0

-- release 1
SELECT RELEASE_LOCK('session key');	-- 1
SELECT IS_FREE_LOCK('session key');	-- 0
-- release 2
SELECT RELEASE_LOCK('session key');	-- 1
SELECT IS_FREE_LOCK('session key');	-- 1
-- release 3 : 이미 모든 lock이 해지된 상태
SELECT RELEASE_LOCK('session key');	-- null

 

 

 

 

 

 

[Reference]

https://dev.mysql.com/doc/refman/5.7/en/locking-functions.html

 

MySQL :: MySQL 5.7 Reference Manual :: 12.15 Locking Functions

This section describes functions used to manipulate user-level locks. Table 12.19 Locking Functions GET_LOCK(str,timeout) Tries to obtain a lock with a name given by the string str, using a timeout of timeout seconds. A negative timeout value means infin

dev.mysql.com

https://kwonnam.pe.kr/wiki/database/mysql/user_lock

728x90
반응형

댓글