php块中的mysql_query是否同时进行查询?

时间:2014-02-06 22:56:28

标签: php mysql sql locking

我安装了SugarCRM。

我的问题是当我在sugarcrm中搜索时,搜索查询会阻止所有其他查询。

Id      User         Host                   db              Command Time    State   Info
49498   sugar        xx.xx.xx.xx:59568      sugarcrm        Query   5       Sorting result  SELECT leads.id  ,leads_cstm.cedula_c,leads_cstm.numplanilla_c,leads_cstm.profession_c,leads_cstm.b
49502   sugar        xx.xx.xx.xx:59593      sugarcrm        Sleep   5               NULL

正如您所看到的,我认为查询ID 49502是等待查询49498完成的。

第一个查询是一个搜索查询,它持续执行的时间过长 第二个查询是索引页面的查询

奇怪的是,如果我打开两个终端并使用与我的sugarcrm安装相同的用户连接到mysql,我可以同时执行两个查询但是如果我在浏览器中进行搜索并打开一个新选项卡并尝试访问索引页面,第二个选项卡挂起,直到第一个选项卡完成执行或从服务器获得超时。

我使用php作为模块和cgi进行了测试。

所以我想它应该是mysql_query函数本身的东西?

有什么想法吗?优化db(很多表,大量内容)非常困难,但至少该站点应该可以同时使用...

1 个答案:

答案 0 :(得分:6)

可能是因为您正在使用基于文件的会话。 PHP将在使用它们时锁定会话文件,这实际上使特定会话的所有请求变为串行。

解决这个问题的唯一方法是使用session_write_close()在每个脚本的基础上释放会话锁,在完成任何会话更改代码之后,或者实现自己的会话处理程序,它可以有自己的锁定逻辑。