【问题标题】:Converting MyISAM to InnoDB. Beneficial? Consequences?将 MyISAM 转换为 InnoDB。有利?结果?
【发布时间】:2011-01-01 15:21:18
【问题描述】:

我们正在运行一个社交网站,该网站会记录每个成员的操作(包括访问其他成员的页面);这涉及到数据库的大量写入。这些操作存储在 MyISAM 表中,由于某些事情开始对 CPU 造成负担,我首先想到的是 MyISAM 的表锁定导致了 CPU 的这种压力。

  • 只有读取和写入,没有更新此表。我认为该表的读写平衡约为 50/50,因此 InnoDB 会是更好的选择吗?
  • 如果我想将表更改为 InnoDB 并且我们不使用外键约束、事务或全文索引 - 我需要担心什么吗?

【问题讨论】:

  • 这不是上述的重复,因为它涉及迁移而不是本身的好处。
  • 您还可以混合使用表,将 MyISAM 用于读取繁重的表,将 InnoDB 用于日志。但是,我个人今天不会将 MyISAM 用于任何事情(实际上只有全文搜索诱饵)。

标签: mysql innodb myisam


【解决方案1】:

尽管在其他线程 (MyISAM versus InnoDB) 中讨论了其使用的任何优点/缺点,但迁移是一个不平凡的过程。

考虑

  • 如果可能,对所有与数据库通信的组件进行功能测试 - 不同的引擎具有不同的语义
  • 尽可能多地运行性能测试 - 有些事情可能会有所改善,有些事情可能会更糟。一个著名的例子是在一张大表上的 SELECT COUNT(*)。
  • 检查您的所有代码是否能够优雅地处理死锁 - 您可以在不显式使用事务的情况下获得它们
  • 估计通过转换您将获得多少空间使用量 - 在非生产环境中进行测试。

您无疑需要在大型软件平台中进行更改;这没关系,但鉴于您(希望)有很多自动测试覆盖率,因此更改应该是可以接受的。

PS:如果“某事开始对 CPU 征税”,那么您应该 a) 在非生产环境中找出是什么,b) 在非生产环境中尝试各种选项来减少它。在没有充分分析问题的情况下,您不应该盲目地开始做诸如更改数据库引擎之类的重大事情。

所有性能测试都应在非生产环境中使用类似生产的数据和生产级硬件进行。否则很难正确解释结果。

【讨论】:

  • 非常感谢您提供此信息。您能否详细说明“不同的语义”?
【解决方案2】:

关于其他潜在的迁移问题:

1) 空间 - InnoDB 表通常需要更多磁盘空间,尽管新版本 InnoDB 的梭子鱼文件格式缩小了差异。您可以通过转换表的最近备份并比较大小来了解这一点。使用“显示表​​状态”来比较数据长度。

2) 全文搜索 - 仅在 MyISAM 上

3) GIS/空间数据类型 - 仅在 MyISAM 上

在性能方面,正如其他答案和参考答案所表明的那样,这取决于您的工作量。 MyISAM 对于全表扫描要快得多。对于高并发访问,InnoDB 往往要快得多。如果您的查找基于主键,InnoDB 也可以更快。

另一个性能问题是 MyISAM 可以始终保持行数,因为它只进行表级锁定。因此,如果您经常尝试获取一个非常大的表的行数,那么使用 InnoDB 可能会慢得多。如果您需要解决此问题的方法,请在 Internet 上搜索,我已经看到了一些建议。

根据表的大小,您可能还需要更新 MySQL 配置文件。至少,您可能希望将字节从 key_buffer 转移到 innodb_buffer_pool_size。如果您将数据库保留为针对 MyISAM 进行了优化,您将无法获得公平的比较。阅读所有 innodb_* 配置属性。

【讨论】:

    【解决方案3】:

    我认为切换到 InnoDB 很有可能会提高性能,但根据我的经验,除非你尝试过,否则你无法确定。如果我是你,我会在同一台服务器上设置测试环境,转换为 InnoDB 并运行基准测试。

    【讨论】:

      【解决方案4】:

      根据我的经验,MyISAM 表仅适用于文本索引,在这种情况下,您需要对大文本进行良好的搜索,但您仍然不需要像 Solr 或 ElasticSearch 这样的成熟搜索引擎。

      如果你想切换到 InnoDB 但又想继续在 MyISAM 表中索引你的文本,我建议你看看这个:http://blog.lavoie.sl/2013/05/converting-myisam-to-innodb-keeping-fulltext.html

      另外:InnoDB 支持使用 Percona 的 innobackupex 进行实时原子备份。这是处理生产服务器时的天赐之物。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-16
        • 1970-01-01
        • 1970-01-01
        • 2010-12-25
        • 2016-06-14
        • 1970-01-01
        • 1970-01-01
        • 2011-06-09
        相关资源
        最近更新 更多