PHP + MySQL'数据库连接'放慢服务器速度

时间:2014-06-11 20:10:48

标签: mysql nginx pdo php

我有一个加载了ajax的脚本,它为每个访问者运行2个mysql语句(每秒约100个)。这是一个简单的SELECT以及UPDATE语句。

对于我的后端,我正在使用AWS RDS。

我注意到我的网站今天关闭了,我看到日志填满了以下内容......

PHP-FPM-5.5错误日志:

[11-Jun-2014 17:18:47] WARNING: [pool www] child 12203, script '/var/www/track.php' (request: "GET /track.php") executing too slow (5.282239 sec), logging

慢速日志

script_filename = /var/www/track.php. [0x00007fcf11fda8f8] execute() /var/www/html/track.php:53

在RDS中,我的图表看起来像这样:

enter image description here

enter image description here

您可以看到数据库连接变得非常高。

在这一点上,我有点困惑如何防止这种情况。

我只能假设“备份”,也许数据库服务器只花了不到一秒的时间才能响应?然后PHP基本上被超载,因为请求进入太快(太忙'等待'),这反过来又开始取消我的服务器。

我使用的PHP-PDO MySQL语句。我尝试将PDO::ATTR_TIMEOUT => 1添加到我的new PDO对象中,但我不知道这是否会解决它(或者即使它正在工作......)。

我的目标是不要让我的服务器因为数据库服务器缓慢或无响应而被取消。我需要PHP“足够智能”,不要等待很长时间或者因为MySQL响应速度不够而过载。

所有这些都是纯粹的猜想,也许它根本就不是RDS,而且PHP得到了备份?我不太确定......

谢谢!

1 个答案:

答案 0 :(得分:0)

我在最近的项目中使用MySQL,但不能否认MySQL可能存在一些性能问题。

您可以尝试向数据库发送选择请求,如果返回true,则可以更新该行。在这种情况下,每个用户和每页加载需要两个连接。因此,我建议您使用只需要脚本连接的存储过程。在场景中使用存储过程可以将连接时间缩短一半。

我的第二个解决方案是根据您所需的设置配置my.conf。这是一个在线工具,可帮助您进行合适的配置https://tools.percona.com/wizard

MySQL可以使用多达40%的系统资源进行日志记录,因此请尝试限制某些日志,例如访问日志,错误日志以及您可能正在使用的任何其他日志。