![完全在内存中运行 LAMP 应用程序](https://linux22.com/image/602419/%E5%AE%8C%E5%85%A8%E5%9C%A8%E5%86%85%E5%AD%98%E4%B8%AD%E8%BF%90%E8%A1%8C%20LAMP%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
我们公司大量使用基于 PHP/MySQL 的项目管理应用程序。使用量如此之大,以至于应用程序真的开始变慢了。这并不是说应用程序内存不足——我的利用率从未超过 50%。CPU 的使用率也没有那么高。应用程序中的代码在查询和磁盘 I/O 方面似乎没有得到很好的优化……它会做一些马虎的事情,比如在一百万行表上执行 SELECT DISTINCT 查询来填充几个复选框。但我们现在只能用它了。
我很好奇,如果我愿意为它投入更多硬件(它在 Linode VPS 上运行),我有哪些选择。是否可以在内存中运行整个应用程序和 MySQL 数据库?我该如何实现?缺点是什么?这是值得探索的东西吗?
答案1
最好的办法是优化查询。或者,您可以在具有 RAID 10 或 SSD 的服务器上运行应用程序。
如果您的查询写得很糟糕(或者没有使用索引或根本没有索引),那么增加 RAM 和启用 MySQL 查询缓存将不会产生太大影响。
答案2
如果将数据库迁移到 nosql 中,则可以在内存中运行,但这是一个糟糕的解决方案,可能行不通。最终的解决方案是改进查询并优化 MySQL 数据库。迁移到 postgres 也是一个可以看到一些小改进的选项。
答案3
正如其他人所说,在内存中运行数据库是一个非常糟糕的想法。调整查询是开始的地方,并且可能会给你带来最大的好处。
使用率从不超过 50%
...但你没有说明你使用的是哪种数据库引擎。如果是 innodb,那么你应该增加缓冲池的大小很多如果是 MyISAM,则增加 myisam_sort_buffer_size一点,还要检查查询被阻止的时间比例 - 如果超过 20% 左右,则切换到 innodb。
听起来您需要专业的帮助来调整您的 DBMS 以及修复您的查询。