【发布时间】:2014-11-11 16:07:05
【问题描述】:
我们的问题是 MySQL 在我们减少 CPU 内核后延迟了我们的应用程序,尽管 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 表。
非常感谢, 弗曼
【问题讨论】:
-
MySQL 主要依赖于它所拥有的硬盘和内存。你什么也没提到。此外,还有一个名为
innodb_buffer_pool_size的神奇变量。它的默认值为 8MB。您希望该变量非常高,达到 RAM 的 80-90%。 -
@Martin Barker 我知道查询正在使用“SHOW PROCESSLIST”排列。昨天,在高峰时段,许多查询要等待 2-20 秒才能处理。我对并发连接没有限制(设置为 0)。整个程序在 Apache 2.2.22、MySQL 5.5.37 和 PHP 5.4.30 上运行。
-
如有疑问 - 最好检查每件事的作用。
innodb_buffer_pool_size是一个数字,表示 MySQL 允许为任何目的分配多少 RAM。通常,MySQL 将工作数据集保存在那里。这意味着它将从 RAM 而不是 HDD 中提取数据。使用 128MB,您无能为力。您希望您的 整个 数据集适合 RAM。处理数据不是问题,问题在于 CPU 足够快地获取数据。将其从 HDD 传输到 CPU 很慢 :) -
至于日志文件,Percona guys 解释得非常好,所以我觉得没什么好说的。
-
@FMan - 不客气,是的 - 他们有关于调优和其他各种东西的优秀文章。另外,既然我们已经在这里了,那么您可能会考虑另一件事,它可能会像这样解决您的问题 - a drop-in ACID compliant engine for MySQL with excellent performance and compression rate。至于关于使用 MyISAM 的评论——如果你能够充分利用 InnoDB 的潜力,它确实不会比 InnoDB 快。你应该或多或少不需要 MyISAM。
标签: php mysql database performance innodb