MySQL有一个功能,可以强制执行最大数量的连接,连接。
当从PHP (和其他语文)连接时,如果您超过了这个数字,我的理解是,您的连接将失败,并且会出现一个错误,说明您已经超过了最大连接数。对,是这样?
我的首选是让连接调用等待(直到某个超时限制)才能使连接可用。但是,我还无法通过阅读MySQL文档和搜索web来确定如何做到这一点。
我担心的是,如果我们的web应用程序出现大量流量,导致大量并发的MySQL连接尝试,那么我们的一些用户脚本就会以错误告终。当然,我们可以修改调用代码来尝试重新连接到一定的次数,但是如果我们可以修改连接尝试自己来处理这个问题,而不是在一个循环中包装每一个“连接”调用,那么它就会干净得多。此外,循环不会产生真正的FIFO队列,因为每个单独的调用线程都会等待一小段时间,然后再试一次,它是否得到连接将取决于在特定时刻是否有连接可用。然后,它会再次等待,当它等待时,一个连接可能会打开,另一个“更远的排队”线程可能会抓住它。
因此,当使用任何PHP连接到MySQL时,是否有一种以“等待连接可用”的方式尝试连接?
发布于 2014-05-09 06:44:51
MySQL没有任何特性可以做您所描述的事情。也就是说,当您访问MySQL时,max_connections没有FIFO (队列)连接。如果连接不能立即连接,所有连接都会出现错误。
MySQL中最相关的是配置变量back_log,它只配置未完成连接数量的限制。也就是说,主MySQL线程需要少量的时间来检查传入的连接,这些连接堆在侦听队列中,它甚至在套接字完成之前,在MySQL确定我们是否有超过max_connections线程之前。实际上,即使服务器当前远低于max_connections线程,也可以在侦听队列中获得大量未完成的连接。
另一种选择是将HA-代理添加到混合中,因为HA确实提供了队列特性。以下是一个解释更多的博客:http://flavio.tordini.org/a-more-stable-mysql-with-haproxy
坦率地说,大多数站点只是增加max_connections,直到它能够处理典型的流量高峰,然后尝试优化数据库活动,因此连接的持续时间很短,因此您有很好的吞吐量。它还有助于编写应用程序代码,以尽可能晚地连接,并在所有查询完成后尽快断开连接。
如果您的流量不典型地超过max_connections,那么您的应用程序将收到一个错误指示。您应该编写您的应用程序来优雅地处理这些错误。也就是说,尽可能好地显示信息,比如“我们很抱歉,我们的负载太大了,目前无法处理您的请求,请马上再试一试。”这至少比突然出现的白屏,或者堆栈跟踪什么的好。
发布于 2014-05-09 06:04:57
试着在页脚的所有php页面中添加下面的php代码:
mysql_close();通常,您的错误消息是mysql连接,不关闭,并将连接保存在服务器端。然而,这只是我很久以前愚蠢的编码错误。如果关闭mysql连接也无法修复您的问题。我认为您需要登录到服务器,以更改php.ini的某些设置,以增加连接用户值。我希望我的回答能帮助你解决问题。
https://stackoverflow.com/questions/23294275
复制相似问题