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

时间:2014-11-11 16:07:05

标签: php mysql database performance innodb

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

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

然后我们将CPU内核减少到6. CPU使用率最高达到约40%。但是,面对更高的负载(但不是比运行12个核心时更高的负载),MySQL无法立即处理所有查询,并且查询正在排队延迟我们的整个应用程序。当我们有12个核心时,这种情况不会发生。

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

非常感谢, FMAN

1 个答案:

答案 0 :(得分:3)

听起来我的MySQL很可能达到了它的I / O限制。我们在数据库服务器上进行了压力测试,对于理解数据库阻塞点至关重要的是,当您添加或更改记录时,您必须进行磁盘写入(SELECT可以缓存)。因此,当我们刚刚阅读我们的网站时,它处理了相当大的负担,但是当我们模拟结账时(创建了多个记录),它很快陷入困境。

那时候,我们没有任何选择。固态硬盘太昂贵而无法提供磁性(而且我们的阻塞数量超出了我们真正击中的任何数量)。我们可以做的最好的是RAID 10.但是,由于云,你现在可以轻松(并且便宜)拥有一个相当强大的数据库服务器,可以更好地处理I / O负载(尤其是SSD价格迅速下降)。您会注意到亚马逊甚至在Provisioned IOPS feature

上销售他们的中间实例
  

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

听起来很像你可能有一个简单的设置(甚至可能在同一台服务器上托管你的数据库)。 AWS并不是城里唯一的游戏,但您可能需要考虑迁移到某种云,或者至少采取一些措施来处理您在服务器上的更高I / O需求。忘记核心数量。如果您的硬盘驱动器窒息,您可以运行72个核心,并且没有任何区别。

另一个提示:查看MySQL Tuner。当您运行它时,它会检查您的数据库统计信息(运行的时间越长越好),并且可以推荐大量有用的调整,这些调整也可以提高性能。