Php 确定调用“GET_LOCK”失败的原因
有没有办法确定调用MySQL的Php 确定调用“GET_LOCK”失败的原因,php,mysql,Php,Mysql,有没有办法确定调用MySQL的GET_LOCK函数失败的原因(即返回0?),或者告诉我为什么我对下面问题的天真理解是错误的 尝试使用字符串str指定的名称获取锁,超时时间为超时秒。如果成功获得锁,则返回1;如果尝试超时,则返回0(例如,因为另一个客户端以前已锁定该名称) 我正在调试一个应用程序,该应用程序尝试使用以下SQL获取锁 SELECT GET_LOCK('thinkup_2_b2_dev.crawler', 1) AS result 每当此代码从PHP上下文运行时,result始终为
GET_LOCK
函数失败的原因(即返回0?),或者告诉我为什么我对下面问题的天真理解是错误的
尝试使用字符串str指定的名称获取锁,超时时间为超时秒。如果成功获得锁,则返回1;如果尝试超时,则返回0(例如,因为另一个客户端以前已锁定该名称)
我正在调试一个应用程序,该应用程序尝试使用以下SQL获取锁
SELECT GET_LOCK('thinkup_2_b2_dev.crawler', 1) AS result
每当此代码从PHP上下文运行时,result
始终为零。这发生在我的本地开发机器上,并且发生在我第一次运行应用程序时。在其他世界中,我相对确定没有以前的锁
当我使用第三方工具(特别是SequelPro)连接到数据库并运行以下命令时
显示完整的进程列表
我没有看到任何关于锁的提及(据我所知,当我运行showfullprocesslist
时,这些类型的锁将显示出来)。我看到的只是一行(我相信它与我当前使用的连接相对应)
9617根本地主机thinkup\u 2\u b2\u dev Query 0 NULL显示完整进程列表
(根据一些独立测试,似乎显示完整进程列表
没有显示此类锁)
有没有办法让MySQL告诉我为什么它在调用
get_lock
时返回零?如果没有,是否有人有进一步调试此问题的想法?如文档所述,函数仅在超时时返回零。这表明即使没有会话持有锁,也会达到1秒的超时。为了验证是否确实如此,我建议尝试更长的超时时间(例如10秒)
如果函数返回零,即使超时时间更长,则特定锁存在系统性问题。如果1秒的超时时间确实太短,而10秒的超时时间解决了这个问题,我建议打开一个bug报告,因为这不是预期的行为。Wild不太可能是暗中刺杀,获取锁的动作需要1秒以上吗?例如,服务器没有足够的资源在<1s内进行锁定。另外,其他功能
是免费的\u锁定
和是使用的\u锁定
可能对调试有用。