PHP/MySQL:尽管CPU使用率始终低于40%,但12个CPU核是否能使应用程序比6个CPU核更快?

PHP/MySQL:尽管CPU使用率始终低于40%,但12个CPU核是否能使应用程序比6个CPU核更快?,php,mysql,database,performance,innodb,Php,Mysql,Database,Performance,Innodb,我们的问题是,MySQL在我们减少了CPU核心后延迟了我们的应用程序,尽管CPU使用率一直低于40%。我的问题是:是不是CPU的减少导致MySQL现在变慢了?或者我应该找别的地方吗 更多细节:我的团队正在运行一个移动应用程序,同时有多达数千名用户在线。它们每秒向后端发出多达100个请求。我们使用的是PHP/MySQL,有12个CPU内核和8GB内存。工具phpMyAdmin显示CPU使用率为15-25%,RAM使用率为1GB 然后我们将CPU核心减少到6个。CPU使用率上升到最大40%左右。然而

我们的问题是,MySQL在我们减少了CPU核心后延迟了我们的应用程序,尽管CPU使用率一直低于40%。我的问题是:是不是CPU的减少导致MySQL现在变慢了?或者我应该找别的地方吗

更多细节:我的团队正在运行一个移动应用程序,同时有多达数千名用户在线。它们每秒向后端发出多达100个请求。我们使用的是PHP/MySQL,有12个CPU内核和8GB内存。工具phpMyAdmin显示CPU使用率为15-25%,RAM使用率为1GB

然后我们将CPU核心减少到6个。CPU使用率上升到最大40%左右。然而,面对更高的负载(但不比我们运行12核时的负载更高),MySQL无法立即处理所有查询,查询排队延迟了我们的整个应用程序。当我们有12个内核时,这并没有发生

如有任何提示或提示,我将不胜感激。我们已经在对服务器(变量)配置进行全面审查。我们只使用InnoDB表

非常感谢,
Fman

在我看来,您的MySQL可能已经达到了I/O限制。我们在DB服务器上做了一个压力测试,了解DB瓶颈的关键是,当您添加或更改记录时,必须进行磁盘写入(
SELECT
可以缓存)。所以,当我们刚刚阅读我们的网站时,它处理了相当多的负载,但当我们模拟结帐(创建了多个记录)时,它很快就陷入了困境

当时,我们没有任何选择。固态硬盘的价格太高,无法与磁性硬盘相比(而且我们的扼流圈数量远远超过了我们曾经真正达到的水平)。我们能做的最好的就是第10次袭击。但是,多亏了云,您现在可以轻松(而且便宜)拥有一个功能相当强大的DB服务器,它可以更好地处理I/O负载(特别是在SSD价格快速下降的情况下)。您会注意到,亚马逊甚至在网上销售其中间实例

对于任何需要快速且一致的I/O性能的生产应用程序,我们建议配置IOPS(每秒输入/输出操作数)存储。调配IOPS存储是一种提供快速、可预测和一致吞吐量性能的存储类型。创建DB实例时,需要指定IOPS速率和存储空间分配。Amazon RDS规定IOPS速率和存储在DB实例的生命周期内或在您更改它之前。配置的IOPS存储针对具有一致性能要求的I/O密集型在线事务处理(OLTP)工作负载进行了优化

听起来很像您可能有一个简单的设置(甚至可能在同一台服务器上托管数据库)。AWS并不是全城唯一的游戏,但你可能想考虑移动到某种云,或者至少提高到能处理你在服务器上的高I/O需求的东西。忘记核心的数量。如果你的硬盘阻塞了,你可以运行72个内核,没有任何区别


还有一个小贴士:退房。当您运行它时,它会检查您的数据库统计数据(运行时间越长越好),并可以推荐许多有益的调整,这些调整也可以提高性能。

MySQL主要取决于它所拥有的硬盘和ram。你没有提到那件事。还有一个神奇的变量叫做
innodb\u buffer\u pool\u size
。它的默认值是8MB。您希望该变量非常高,高达RAM的80-90%。@Martin Barker我知道查询正在使用“SHOW PROCESSLIST”排队。昨天,在高峰时段,许多查询等待2-20秒处理。我对并发连接没有限制(设置为0)。整个程序运行在Apache2.2.22、MySQL 5.5.37和PHP5.4.30上。如果有疑问,最好检查每一个程序的功能
innodb\u buffer\u pool\u size
是一个数字,表示MySQL可以为任何目的分配多少RAM。通常,MySQL将工作数据集保存在那里。这意味着它将从RAM而不是HDD中提取数据。有了128MB,你就做不了什么了。您希望将整个数据集放入RAM中。处理数据不是问题,问题是将数据足够快地传送到CPU。从硬盘到CPU的传输速度很慢:)至于日志文件,它解释得很好,所以我想我对此没有什么可说的。@FMan-不客气,是的-他们有关于调优和其他各种事情的优秀文章。另外,既然我们已经在这里了,这里还有另外一件事你可能会考虑,那就是可以解决你的问题。至于关于使用MyISAM的评论——如果你能够充分利用InnoDB的潜力,它实际上并不比InnoDB快。你应该或多或少不需要MyISAM。