MySQL连接限制和PHP MySQL连接

时间:2010-07-28 00:04:37

标签: php mysql

我遇到了令人沮丧的问题。我的Web服务有一个发送到php模块的电子邮件。简而言之,一旦我的用户向他的专用电子邮件地址发送电子邮件,我的邮件服务器就会捕获该电子邮件,将其发送到我服务器上运行的PHP脚本。此PHP脚本打开MySQL连接并将电子邮件内容保存到数据库。

到目前为止一切顺利。一旦超出/etc/my.cnf中设置的MySQL连接限制,问题就会开始出现。它被设置为500.如果500个或更多用户同时发送电子邮件,我的MySQL将无法处理新连接。

你有什么建议?我应该使用持久的MySQL连接还是任何其他方法,例如将收到的电子邮件内容写入txt文件,然后使用cron作业将它们保存到数据库中?

感谢您的建议!

4 个答案:

答案 0 :(得分:1)

我在我运行的网站上有类似的功能。而不是将电子邮件发送到脚本,而您无法控制在给定时间将要发送的电子邮件数量,请设置一个cron。这个cron可以随意运行。它可以连接到邮件服务器,读取一次选择的邮件,并保持与MySQL的单一连接。

如果您遭到邮件轰炸,这也会有很大帮助。

答案 1 :(得分:1)

  

如果有500个或更多用户同时发送电子邮件

嗯。两个事件在计算机系统上“同时”发生是非常不寻常的 - 但是流程重叠的频繁。我希望你能从优化电子邮件处理程序中获得很多好处。但是你提供的细节很少。你不是说这是在运行什么操作系统。

我建议您检查CPU或内存是否没有过度使用的迹象(NB,您希望大约80%的内存空闲)。如果处理程序为每个消息启动一个PHP实例,那么这是一个主要的开销 - 但这不会导致mysql连接打开的时间。

如果可以避免,请不要使用Blob / Clobs - 将数据转储到diskfile并从数据库中引用它。

应用所有常用的性能调整步骤(优化物理存储层 - 例如RAID,数据库调整)。

整理脚本运行的所有数据库交互,并在一个块中运行它们,用db connect和close语句括起来。

如果你无法同步处理音量,那么...... 不要重新发明轮子,不要实现自己的排队系统来处理消息 - 将消息直接路由到maildir或邮箱,并运行守护进程轮询内容并处理它。现成的MDA将比使用PHP更有效。

下进行。

答案 2 :(得分:0)

为什么不将连接限制增加到您期望的并发用户数?

OR

稍微延迟或重试一段时间,如果失败,它会再次尝试连接。

答案 3 :(得分:0)

另一个建议是像守护进程一样运行PHP脚本,该守护进程只连接一次DB并等待输入以无限循环进行处理。