【问题标题】:How many databases can MySQL handle?MySQL 可以处理多少个数据库?
【发布时间】:2010-06-21 20:28:36
【问题描述】:

MySql 服务器目前有 235 个数据库。我应该担心吗? 它们都具有与 MyISAM 表相同的结构。

硬件是在四核 AMD Opteron 2.2GHz 上运行的具有 2 GB RAM 的虚拟机。

最近cPanel给我发了一封邮件说MySql失败了,已经重启了。

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

【问题讨论】:

  • 虽然我从来没有听说过限制我可以检查你的结构——真的有这么多吗?

标签: mysql database hardware load


【解决方案1】:

mysql 中的“数据库”是真正的目录,不管你把所有的表放在一个或每个表中,都不会影响它的限制。

主要问题是表缓存。如果不对其进行调整,您将拥有默认的表缓存(通常 = 64),这意味着您每次打开一个表时都会关闭一个表。这太糟糕了。

除了在 MyISAM 中,情况更糟,因为关闭表会将其键块从键缓存中抛出,这意味着后续的索引查找或扫描将读取磁盘中的实际块,这很可怕而且很慢,确实需要避免。

我的建议是:

  • 如果可能,立即将表缓存增加到 > 表的总数
  • 在你的监控中监控全局状态变量Opened_Tables;如果它迅速增加,那就不好了。
  • 在非生产环境中对相同硬件进行性能和稳健性测试(如果您还没有这样做的话)。

【讨论】:

  • 我还要添加,检查文件描述符限制 - 虽然没有直接连接到 no。的数据库,你可以用很多 MyISAM 表的文件描述符用完。
  • 正常的启动脚本会根据需要增加数量(在 Linux 下)——当然可以有 10,000 个没有任何问题。其他引擎也可能不使用每个表的文件描述符。
【解决方案2】:

(重新发布我的评论以获得更好的可见性) 谢谢大家的cmets。该系统类似于谷歌分析。用户网站的访问被记录到“主”表中。本机应用程序正在监视主表并处理已注册的访问并将它们写入用户的数据库。每个用户都有自己的数据库。这已被决定用于分片。正在为每个用户运行各种报告和统计信息。如果它只在特定的数据库(更少的数据)上运行它会更快,我知道这不是最好的设置。但我们必须处理一段时间。

【讨论】:

  • 此信息似乎与原始问题有关。如果您希望它比评论具有更高的可见性,为什么不编辑原始问题以包含此信息?
【解决方案3】:

我认为没有硬性限制,唯一真正限制您的是您的硬件和这些数据库将获得的流量。

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

您应该首先分析每个数据库(或一组数据库,当然取决于它们的使用方式)的使用情况。

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

【讨论】:

    【解决方案4】:

    你做错了。

    评论您的数据库的一些细节,我们可能会告诉您您的设计出了什么问题。

    【讨论】:

    • 感谢大家的cmets。该系统类似于谷歌分析。用户网站的访问被记录到“主”表中。本机应用程序正在监视主表并处理已注册的访问并将它们写入用户的数据库。每个用户都有自己的数据库。这已被决定用于分片。正在为每个用户运行各种报告和统计信息。如果它只在特定的数据库(更少的数据)上运行它会更快,我知道这不是最好的设置。但我们必须处理一段时间。
    猜你喜欢
    • 1970-01-01
    • 2011-05-21
    • 2022-01-20
    • 1970-01-01
    • 2013-09-07
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多