我们目前有一个配备 8 GB RAM(双四核 CPU)的专用机箱,我们的数据库已增长超过 17 GB(我们的应用程序超过 3 个数据库)。我认为这足以让我们迁移到具有更多内存的机器(将分片放在一边)。
新机箱有 48 GB 的 RAM。我们还有第二个专用机箱,我们也将数据库复制到该机箱(主从)。我考虑在同一机箱上设置两个并行运行的数据库实例(运行它们自己的文件系统),但使用不同的端口,并在其前面安装 mysql 代理来平衡我的读取流量。
我的理由是,我认为我们的每个数据库在遇到其他瓶颈之前不需要超过 20-22 GB 的 RAM。并行运行这些数据库并对读取流量进行负载平衡是否能提供与使用两个专用盒相当的性能?
答案1
您推理的依据是什么?您预计会遇到哪些瓶颈?
数据库中存储的数据大小不应成为您为系统提供的 RAM 数量的基础。如果负载过大,无法有效地处理请求,那么您应该考虑这一点。但是,查询调整不当、缺少索引以及 MySQL 实例配置不当的问题无法通过硬件升级完全解决。
在经过适当调整的实例上,如果您遇到瓶颈导致所有内存在负载下无法得到利用,则多个实例无法解决这个问题。这可能是 CPU 瓶颈或潜在的磁盘 I/O。例如,请查看InnoDB内存使用情况。
存在某些限制。例如,对于 MySQL 5.0 上的 MyISAM,即使在 64 位平台上,每个键缓冲区也将限制为 4GB,因为它们由 32 位整数引用。
MySQL 为每个连接创建一个线程。因此,如果您运行的不是 64 位平台,即使使用物理地址扩展。
如果你想扩展读取请求,可以使用多个数据库服务器进行负载平衡低压开关柜. 我不会使用多个实例。
高性能 MySQL是一本很棒的书。我建议你读一读。