Php MySQL-更新相同的值会导致速度减慢

Php MySQL-更新相同的值会导致速度减慢,php,mysql,Php,Mysql,我们目前正在调查一个关于我们项目的问题,涉及数万个网站电话。问题似乎是,当访问者访问我们的网站时,它会不断更新一个特定的值 该价值是为客户调用广告活动横幅,其价值“印象”随着每次站点调用而增加。由于这只是一个活动,它每天更新数千次,似乎会降低服务器的速度。其中一个想法是,这可能是,因为所有的访问者都会随着页面负载的增加而增加这个值,所以它会被困在队列中,直到最终完全减速。可能吗 我们可以采取什么措施来阻止经济放缓?我们可以增加或测试MySQL限制吗?如果是,会是哪一个? 或者只升级服务器会有帮助

我们目前正在调查一个关于我们项目的问题,涉及数万个网站电话。问题似乎是,当访问者访问我们的网站时,它会不断更新一个特定的值

该价值是为客户调用广告活动横幅,其价值“印象”随着每次站点调用而增加。由于这只是一个活动,它每天更新数千次,似乎会降低服务器的速度。其中一个想法是,这可能是,因为所有的访问者都会随着页面负载的增加而增加这个值,所以它会被困在队列中,直到最终完全减速。可能吗

我们可以采取什么措施来阻止经济放缓?我们可以增加或测试MySQL限制吗?如果是,会是哪一个? 或者只升级服务器会有帮助吗


我对此的访问权限和知识有限,因此无法给出特定于服务器的答案。

可能吗?对可能吗?没有

在MyISAM中,update或delete查询将锁定该表,以便该表上的任何其他进程也可以锁定并建立队列。在InnoDB中,根据索引的不同,更新会稍微复杂一些,但更新的锁往往更具体于行

如果您只是更新一个没有很多行的表中的计数器,那么查询执行的速度很快,您就不会建立队列。你需要大量的访问者,才能迅速地建立起这种关系。可以这样想-如果uodate查询在10毫秒内运行,那么通常需要每9毫秒有一个访问者才能有一个队列

如果你确实有大量的访问者,你可以考虑只把新的记录插入到一些印象表中,然后在这个印象表上运行一个select CONTUTE()。这应该比更新计数器更顺畅


另外,另一种可能性是,您的PHP脚本可能正在建立持续的连接,而不是关闭,这可能会导致资源缓慢耗尽,最终导致连接耗尽。我们必须查看您的代码才能确定,查看您的表描述和其他人提到的流程列表会有所帮助。

是的,该表可能处于锁定状态,这将对所有其他查询进行排队。您使用的是myisam还是innodb?当减速发生时,您是否查看了流程列表?这似乎是一个数据库问题,而不是PHP。我们使用的是MySQL。我只知道这些。在要插入/更新的表上运行
show create table…
。下次发生减速时,请使用
显示完整流程列表
。我必须在phpMyAdmin中的何处输入此内容?是的,您可以在那里运行它。。或者您可以将其作为辅助脚本运行。由于访问权限有限,我无法显示代码。但我知道的是,我们多次因连接太多而出错。所以这可能是一个值得研究的问题。是的,我们同时收到了大量的流量。让我们举一个“极端的例子”:我有2.500个用户试图同时更新X——速度变慢了。当我现在开始计算同一个活动时,但通过表“活动视图”和mysqli_num_rows()等,它可以正常工作吗?不,在您的极端示例中不是。有这么多同时出现的用户和错误消息,您的问题更可能是基础架构。您应该确定这些数字,因为同时用户的数量越多,需要的硬件越多,增长的机会也越大。对于2500个用户,我会确保至少有32GB的RAM。您可能需要将max_connections设置为2500。请参阅我的最后一条评论中给出的一些提示,insert+count()方法仍然有更好的机会避免由于锁定而产生的问题,并且您仍然应该确保在表中使用InnoDB(目前InnoDB的速度比MyISAM表快,功能也更强大)。有了这么多用户,您可能还想开始考虑/计划迁移到MySQL集群,以便能够随着增长进行扩展。