Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 确定调用“GET_LOCK”失败的原因_Php_Mysql - Fatal编程技术网

Php 确定调用“GET_LOCK”失败的原因

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始终为

有没有办法确定调用MySQL的
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锁定
可能对调试有用。