반응형
MySQL/MariaDB GET_LOCK 라이프사이클 with Events
사용을 시도하는 중입니다.GET_LOCK()
이벤트 스케줄러가 실행하는 이벤트를 한 번에 하나만 실행하도록 제한하는 시스템을 구현하는 MariaDB 10.0.19의 기능입니다.기본적으로 각 이벤트는 'run_lock'을 획득하려고 시도하고 성공적으로 실행되면 잠금이 사용 가능하거나 시간이 초과될 때까지 기다립니다.문제는 테스트 과정에서 저장된 프로시저가 성공적으로 완료되더라도 잠금이 해제되지 않는 경우를 많이 발견할 수 있다는 것입니다.이제 명령줄에서 테스트할 때 잠금이 세션과 연결되어 있으므로 종료하면 잠금이 해제됩니다.이벤트가 종료되는지(정상적인지 비정상적인지) 테스트/파악할 수 없는 것은 모든 잠금이 해제되는지 여부입니다.
그래서 저는 두 가지 이벤트를 만들었습니다.
DELIMITER //
DROP EVENT IF EXISTS test_lock_1;
CREATE EVENT test_lock_1
ON SCHEDULE EVERY 1 MINUTE STARTS NOW()
DO this_event:BEGIN
SELECT GET_LOCK('test', 75);
SELECT SLEEP(55);
END //
DELIMITER ;
DELIMITER //
DROP EVENT IF EXISTS test_lock_2;
CREATE EVENT test_lock_2
ON SCHEDULE EVERY 30 SECOND STARTS NOW()
DO this_event:BEGIN
SELECT GET_LOCK('test', 25);
SELECT SLEEP(45);
END //
DELIMITER ;
공유 잠금을 해제할 수 없음을 알립니다.정상적이든 비정상적이든 이벤트가 종료된 후 잠금이 해제되었습니다.따라서 각 이벤트는 자체 세션에서 실행되고 종료 시 모든 잠금이 해제된다고 가정합니다.
잠금이 성공적으로 획득된 경우에만 계속해야 합니다.
DELIMITER //
CREATE EVENT test_lock_1 ON SCHEDULE EVERY 1 MINUTE DO
BEGIN
IF GET_LOCK('test', 30) IS TRUE THEN
SELECT SLEEP(65);
END IF;
END //
DELIMITER ;
언급URL : https://stackoverflow.com/questions/32360624/mysql-mariadb-get-lock-lifecyle-with-events
반응형
'programing' 카테고리의 다른 글
Ajax와 같은 비동기 호출을 호출하는 동안 코드를 대기시키는 방법 (0) | 2023.09.06 |
---|---|
iOS 이미지 방향에 이상한 동작이 있음 (0) | 2023.09.06 |
뷰의 오른쪽 여백을 프로그래밍 방식으로 변경하시겠습니까? (0) | 2023.09.06 |
자바스크립트 strcmp()가 있습니까? (0) | 2023.09.06 |
Administrator(관리자)로 로그인한 경우에도 파일을(를) (0) | 2023.09.06 |