我在 Apache 服务器上的不同虚拟主机下运行多个 PHP 应用程序。每个应用程序都使用 MySQL 作为后端。每个应用程序都使用同一数据中心中的不同 MySQL 服务器。我们的一些应用程序处理来自数据库的大量数据以创建一些汇总报告,这有时需要大约 30-40 秒(我们计划在未来异步运行此操作)。此报告服务使用一组小查询而不是需要大量时间的大查询。这旨在减少单个表被锁定的时间。即使我们的每个应用程序都使用单独的数据库,运行此报告也会导致此服务器上托管的其他应用程序的性能严重下降。有时其他应用程序甚至也会发生请求超时。
运行这些报告时,应用程序服务器上的 RAM/CPU 利用率低于 50%。我使用的是 PHP 7.2,在 Apache 2.4 上使用 PHP-FPM。Apache上启用了mpm_event
、fcgid
和模块,MySQL 版本为 5.7proxy
proxy_fcgi
我们使用多个数据库服务器的主要原因是为了减少一个应用程序对另一个应用程序的影响。为什么会发生这种情况?如何解决?
答案1
- 使用 InnoDB,而不是 MyISAM。这可能是锁定的答案。
- 适当设置
innodb_buffer_pool_size
。你有多少 RAM? - 考虑构建和维护“摘要表”;这应该可以消除 30-40 秒查询的需要。