gpt4 book ai didi

MySQL/MariaDB GET_LOCK 生命周期与事件

转载 作者:行者123 更新时间:2023-11-29 12:01:06 24 4
gpt4 key购买 nike

我正在尝试使用 MariaDB 10.0.19 的 GET_LOCK() 功能来实现一个系统,该系统将事件调度程序运行的事件限制为一次只能运行一个。本质上,每个事件都会尝试获取“run_lock”,如果成功则运行,否则它将等待直到锁可用或超时。问题是,在测试中,我可以发现很多情况下,即使存储过程成功完成,也不会释放其锁定。现在我知道在命令行测试时锁与我的 session 关联 - 所以如果我退出锁就会被释放。我似乎无法测试/弄清楚的是,如果事件终止(正常或异常),它的所有锁都会被释放吗?

最佳答案

所以我创建了两个这样的事件

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 ;

注意没有释放共享锁。事件退出后,无论正常还是异常,锁确实被解锁了。所以我推测每个事件都在它自己的 session 中运行,并且在退出时所有锁都被释放。

关于MySQL/MariaDB GET_LOCK 生命周期与事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32360624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com