MySQL FOR UPDATE独占访问

时间:2015-06-22 19:44:32

标签: mysql concurrency

我有几台服务器打到一个普通的MySQL盒子,我需要独占访问一个预定作业表。 在这里和其他地方读完之后,我被引导相信SELECT ... FOR UPDATE是我想要的,但现在我们(很少)看到多个服务器拿起相同的记录。

这里是PROC(减去BEGIN / END的东西,因为它正在用我的格式打地狱):

CREATE DEFINER=`root`@`%` PROCEDURE `PopScheduledJob`(OUT `JobId` varchar(36) )
    SELECT ScheduledJobId INTO JobId
    FROM scheduledjob
    WHERE 
    Status = 0
    AND NextRun < UTC_TIMESTAMP()
    ORDER BY StartDate
    LIMIT 1     
    FOR UPDATE;

    UPDATE scheduledjob
    SET Status = 2
    WHERE ScheduledJobId = JobId;   

所以这里的意图是它应该只获取Status = 0的作业,并立即将其设置为1。 我希望这会阻止任何其他线程/进程访问同一条记录,但现在似乎并非如此。

编辑:忘了提及,我们有一个InnoDB支持商店

0 个答案:

没有答案