MySQL能处理多少个数据库?

9

我的MySql服务器目前有235个数据库。我应该担心吗?

它们都具有相同的结构,使用MyISAM表。

硬件是一个虚拟机,配备2 GB RAM,运行在一个四核AMD Opteron 2.2GHz上。

最近,cPanel给我发送了一封电子邮件,说MySql失败了,并进行了重启。

预计将创建新的数据库,我想知道是否应该增加更多内存,或者只需添加另一个虚拟机。


1
虽然我从未听说过有限制,但我可以检查一下你的结构——那么多是否真的必要? - Kerry Jones
4个回答

9
在MySQL中,“databases”实际上是目录,无论您是将所有表放在一个目录下还是分别放在各自的目录下,都不会影响其限制。
主要问题在于表缓存。如果未对其进行调整,则使用默认表缓存(通常为64),这意味着每次打开表时都会关闭一个表。这非常糟糕。
除了MyISAM之外,情况更糟,因为关闭表会将其关键块从关键字缓存中删除,这意味着后续的索引查找或扫描将从磁盘读取实际块,这很慢并且需要避免。
我的建议是:
- 如果可能,请立即将表缓存增加到大于表总数。 - 在监控中监视全局状态变量Opened_Tables;如果它快速增加,则情况不妙。 - 在非生产环境中使用相同的硬件进行性能和稳定性测试(如果您还没有这样做)。

1
我还要补充一点,检查文件描述符限制 - 虽然与数据库数量没有直接关系,但是如果有大量的MyISAM表,你可能会用完文件描述符。 - nos
正常的启动脚本会根据需要增加数量(在Linux下) - 它肯定可以没有任何问题地达到10,000。此外,其他引擎可能不会使用每个表一个文件描述符。 - MarkR

1
(为了更好的可见性重新发布我的评论) 感谢大家的评论。该系统类似于Google Analytics。用户网站的访问记录被记录在“主”表中。本地应用程序监视主表并处理注册的访问,并将其写入用户的数据库。每个用户都有自己的数据库。这已经决定了分片。为每个用户运行各种报告和统计数据。如果仅在特定的数据库上运行,它会更快(数据较少)。我知道这不是最佳设置。但我们必须暂时处理它。

2
这些信息似乎与原问题相关。如果您希望它比评论更具可见性,为什么不编辑原问题以包含这些信息呢? - Trevor

0

我不相信有硬性限制,真正限制你的只有硬件和数据库流量。

你似乎内存很少,这可能意味着你没有大量的连接...

你应该从为每个数据库(或一组数据库,当然取决于它们的使用方式)分析使用情况开始。

我的建议是 - MySQL(或任何数据库服务器)可以使用更多内存。你永远不能拥有足够的内存。


0

你做错了。

如果你在评论中提供一些关于你的数据库的具体信息,我们可能可以告诉你你的设计出了什么问题。


1
感谢大家的评论。 该系统与Google Analytics类似。 用户网站的访问记录被记录在“主”表中。本地应用程序监视主表并处理注册的访问,并将其写入用户的数据库。每个用户都有自己的数据库。这是为了分片而决定的。为每个用户运行各种报告和统计数据。如果仅在特定的数据库上运行,速度会更快(数据较少)。 我知道这不是最好的设置。但我们必须暂时处理它。 - Catalin Roman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接