PHP+MySQL“DB连接”降低服务器速度

PHP+MySQL“DB连接”降低服务器速度,mysql,nginx,pdo,php,Mysql,Nginx,Pdo,Php,我有一个加载了ajax的脚本,它为每个访问者每秒运行2条mysql语句~100条。这是一个简单的SELECT和UPDATE语句 对于我的后端,我使用AWS RDS 我注意到我的网站今天宕机了,我看到日志中充满了以下内容 PHP-FPM-5.5错误日志: [11-Jun-2014 17:18:47]警告:[池www]child 12203,脚本'/var/www/track.php'请求:GET/track.php执行太慢5.28223秒,日志记录 慢日志 script_filename=/var

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

对于我的后端,我使用AWS RDS

我注意到我的网站今天宕机了,我看到日志中充满了以下内容

PHP-FPM-5.5错误日志:

[11-Jun-2014 17:18:47]警告:[池www]child 12203,脚本'/var/www/track.php'请求:GET/track.php执行太慢5.28223秒,日志记录

慢日志

script_filename=/var/www/track.php。[0x00007fcf11fda8f8]执行/var/www/html/track.php:53

在RDS中,我的图表如下所示:

您可以看到DB连接变得非常高

在这一点上,我有点困惑该怎么做来防止这种情况

我只能假设有什么东西被“备份”,也许数据库服务器只花了很短的时间来响应?然后,PHP基本上超载了,因为请求传入太快,太忙了,“等待”,这反过来又开始破坏我的服务器

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

我的目标是不让我的服务器因为数据库服务器速度慢或没有响应而被关闭。我需要PHP“足够聪明”,不要因为MySQL响应不够快而等待很长时间或过载

所有这些都是纯粹的猜测,也许根本不是RDS,不知何故PHP得到了备份?我不太确定


谢谢

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

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

我的第二个解决方案是根据所需设置配置My.conf。这里有一个在线工具,可以帮助您进行适当的配置


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

您必须检查脚本是否存在问题。还要检查此脚本中使用的表是否存在字段索引。还要优化mysql查询缓存,并尝试使用memcache最小化对数据库的请求这可能是一个愚蠢的问题,但是,您正在关闭执行查询的函数中的连接吗?还可以使用php的mysql持久连接方法使用mysql连接池来避免每次创建连接。这看起来像是一种恶性循环过载场景,其中数据库服务器瞬间过载,响应变慢。因此,php下的web服务器开始启动新实例/线程来处理传入的请求,而不是重用现有池。因此,数据库服务器获得了一系列新的连接,速度甚至更慢。apache/httpd中有配置变量,我确信nginx中也有配置变量,可以防止活动实例/线程池过大。您应该尝试调整它。+如果是myisam或innodb,请查看表的引擎,因为每次执行更新查询时,myisam引擎都会锁定表,但innodb只锁定进行更新的行。也许您最好尝试使用rabbitmq使更新过程同步以避免锁定。注意:在链接的网站上,您需要在向导结束时注册以获取生成的配置。如果你对此感到不舒服,你就不必浪费时间了。