【问题标题】:When it is time for a table to change from MyISAM to InnoDb?何时将表从 MyISAM 更改为 InnoDb?
【发布时间】:2010-12-16 08:00:18
【问题描述】:

这个问题就像我之前的问题的延续: Am I right that InnoDb is better for frequent concurrent updates and inserts than MyISAM?

但这次我有具体的问题。
当我们没有很多并发更新(插入)时,我们知道 MyISAM 比 InnoDb 快。当我们有许多并发更新时,MyISAM 表被锁定,所有其他客户端都应该等待。

1) 但是什么时候应该从 MyISAM 更改为 InnoDb?每秒更新1次?每秒更新 10 次?每秒更新 100 次?
2)举一个具体的例子,将我网站上的一个表更改为 InnoDb 会更好,我通常每分钟有几个更新(来自不同的会话),但有时它可能是每秒约 2-3 次更新?

【问题讨论】:

    标签: mysql database performance innodb myisam


    【解决方案1】:

    如果可以的话,您可能不应该一次更改一张桌子。

    更改整个服务器。这样,您可以针对仅 innodb 的工作负载而不是 myisam 工作负载调整服务器。两者互不兼容(内存缓冲区是为特定引擎分配的;它们不能共享内存)。

    假设您有 16G 的 ram,您可能希望使用大约 12G 的内存作为 innodb 缓冲池,前提是您没有 MyISAM 表。

    同样,如果您只有 MyISAM 表,您可能希望完全关闭 innodb,并为您的 myisam 密钥缓存提供不到一半(比如 6G)。

    混合的 myisam-innodb 服务器需要权衡内存调整。

    此外,您真的只想进行一次性能测试,而不是每次更改表时。

    在某些情况下过于简单化,而在其他情况下说“我们知道 MyISAM 比 InnoDb 更快”是完全错误的。

    如果您已经为您的服务器正确调整了 InnoDB 并且正在运行正确的服务器级硬件,那么 InnoDB 应该能够在大多数查询上与 MyISAM 竞争(不包括全表扫描,但您并没有做很多,对吧)。

    也就是说,除非您的数据是“小玩笑”大小。

    如果您发现 innodb 的插入/更新速度要慢得多,请记住它提供了更好的耐用性水平 - 如果您将其调整为与 MyISAM 大致相同的耐用性,那么您有望看到良好的性能。

    【讨论】:

    • 好吧,在我们的主服务器上,我们只使用 InnoDb。但我问的是我们在共享主机上的网站,所以我认为你的想法并不适用,因为据我了解,共享主机上的 MySql 服务器对所有主机用户的所有数据库都有通用设置。
    • 如果您使用的是共享主机,则无法期待性能。我希望您的数据库很小,否则您将遇到性能灾难。共享主机不允许托管繁忙的站点或大型数据库。在此类网站上,性能通常并不重要。
    • 嗯,我们每天有 500Mb 的数据库和数百名访问者。查询可能足够复杂。但是网站运行正常,也许我们的主机很幸运。
    • @nightcoder:500Mb 比较小。如果您调整了查询​​并添加了所有正确的索引,那么数据库几乎不会注意到您的存在。
    • 是的,这绝对是运气而不是判断;你不知道你在和谁分享,也不知道他们损坏的应用程序犯了什么 MySQL 暴行。 500M 足够小,可以放在配置非常普通的服务器上的内存中;如果您没有足够的性能,只需购买其中一种,它比开发人员评估替代方案的时间要便宜得多。
    【解决方案2】:

    我认为您的问题在您提到的上一个问题中得到了很好的回答。

    1) 创建表时。 InnoDB 提供了比仅仅行级锁定更多的优势。当您有多个 sql 客户端进行更新时,速度更快,数据丢失/损坏的风险更小,引用完整性等......只有每秒几笔交易(TPS),您不太可能分辨出性能的差异,但是 InnoDB更可靠且可扩展性更好。

    2) 只有 2-3 TPS,您不会看到 InnoDB 和 MyISAM 之间有任何显着差异。即使在半古老的硬件上也是如此。

    仅供参考,现代磁盘驱动器应该能够每秒处理至少约 200 个更新事务。

    我建议您阅读InnoDBMVCCACID

    【讨论】:

    • 我了解 InnoDb 的优势,但我认为在共享虚拟主机上 - 性能和“轻便”是数字优先级。否则我肯定会一直使用 InnoDb。
    • @nightcoder:那么你应该总是使用 InnoDB。从整体上看,它会比 MyISAM 更“轻”。
    猜你喜欢
    • 2011-10-14
    • 2013-04-25
    • 2014-02-26
    • 2011-11-19
    • 1970-01-01
    • 2023-04-07
    • 2010-11-16
    • 2010-11-12
    • 1970-01-01
    相关资源
    最近更新 更多