Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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阻止多个MySQL访问,但未锁定MySQL_Php_Mysqli - Fatal编程技术网

使用PHP阻止多个MySQL访问,但未锁定MySQL

使用PHP阻止多个MySQL访问,但未锁定MySQL,php,mysqli,Php,Mysqli,我有一个上传位置,用户可以用上传的文件更新我数据库的一部分。文件通常高达9gb,因此插入15000000行可能需要几分钟 在点击网站上的按钮更新数据库后,PHP(使用mysqli)基本上进行mysql锁定。如果我打开其他选项卡,在大型更新完成之前,它们将一无所获。 但是,我知道它实际上并没有锁定数据库/表,因为在CLI中我仍然可以“从表中选择count(*)并立即给出结果 插入15000000条记录,同时仍允许其他php页面访问数据库(仅供阅读)的最佳方法是什么?您可以使用“插入延迟”。INSE

我有一个上传位置,用户可以用上传的文件更新我数据库的一部分。文件通常高达9gb,因此插入15000000行可能需要几分钟

在点击网站上的按钮更新数据库后,PHP(使用mysqli)基本上进行mysql锁定。如果我打开其他选项卡,在大型更新完成之前,它们将一无所获。 但是,我知道它实际上并没有锁定数据库/表,因为在CLI中我仍然可以“从表中选择count(*)并立即给出结果

插入15000000条记录,同时仍允许其他php页面访问数据库(仅供阅读)的最佳方法是什么?

您可以使用“插入延迟”。INSERT语句的延迟选项是对标准SQL的MySQL扩展,如果客户机不能或不需要等待INSERT完成,则该选项非常有用。当您使用MySQL进行日志记录,并且还定期运行SELECT和UPDATE语句(需要很长时间才能完成)时,这是一种常见的情况

您可以在官方文档中阅读有关此资源的信息


;-)

问题在于会话

由于上传根据会话中的登录进行了验证,并且我在启动db写入之前未能执行会话_write_close(),因此会话文件在对db的整个9gb读/写过程中保持锁定


这就解释了为什么我仍然可以使用CLI mysql和基本php(我用来测试的基本php中没有会话)。

听起来好像Apache workers的数量已经达到了最大值,所以它会一直保留请求,直到有空闲的worker?将其移动到cronjob。这不仅仅是Apache workers的最大值。制作另一个刚刚打开的页面。它只是在访问数据库的页面上有问题。PHP在查询运行时运行良好,MySQL在查询运行时运行良好。这个问题似乎与MySQL+PHP组合有关。根据phpinfo(),mysqli.max_links设置为unlimited。我似乎不知道问题出在哪里。这听起来合乎逻辑,但似乎没有帮助。我想我拥有的PHP块比MySQL块更多。我已经可以从PHP以外的东西访问MySQL了。对于一次可以访问数据库的数量是否有php或mysqli限制?