将MyISAM转换为InnoDB。 有利? 后果是什么?

我们正在运行一个社交网站,记录每个成员的行为(包括访问其他成员的网页); 这涉及到很多写入数据库。 这些操作存储在MyISAM表中,并且由于开始对CPU征税,我首先想到的是MyISAM的表锁定导致了CPU的压力。

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

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

    考虑

  • 在可能的情况下,功能性地测试与数据库交谈的所有组件 - 差别引擎具有不同的语义
  • 尽可能多地执行性能测试 - 有些事情可能会改善,其他事情可能会变得更糟。 一个众所周知的例子是大表上的SELECT COUNT(*)。
  • 检查你的所有代码是否能正常处理死锁 - 你可以在没有明确使用事务的情况下得到它们
  • 估算通过转换获得的空间使用量 - 在非生产环境中测试。
  • 您无疑需要在大型软件平台上进行改变; 这是可以的,但看到你(希望)有很多自动测试覆盖,改变应该是可以接受的。

    PS:如果“某物开始对CPU征税”,那么你应该a)在非生产环境中找出什么,b)在非生产环境下尝试各种选择来减少它。 当你没有完全分析问题时,你不应该盲目地开始做重大事情,比如更改数据库引擎。

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


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

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

    2)全文搜索 - 仅在MyISAM上

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

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

    另一个性能问题是MyISAM总是可以保持行计数,因为它只能进行表级锁定。 因此,如果您经常尝试获取非常大的表的行数,那么InnoDB可能会慢很多。 搜索互联网,如果你需要解决这个问题,我已经看到了几个提议。

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


    我认为切换到InnoDB很可能会提高性能,但根据我的经验,在尝试之前无法确定。 如果我是你,我会在同一台服务器上建立一个测试环境,转换成InnoDB并运行基准测试。

    链接地址: http://www.djcxy.com/p/52221.html

    上一篇: Converting MyISAM to InnoDB. Beneficial? Consequences?

    下一篇: Reducing mono framework size for macOS application bundle