将MyISAM转换为InnoDB。 有利? 后果是什么?
我们正在运行一个社交网站,记录每个成员的行为(包括访问其他成员的网页); 这涉及到很多写入数据库。 这些操作存储在MyISAM表中,并且由于开始对CPU征税,我首先想到的是MyISAM的表锁定导致了CPU的压力。
尽管在其他线程(MyISAM和InnoDB)中讨论了它的使用的任何好处/缺点,但迁移是一个不平凡的过程。
考虑
您无疑需要在大型软件平台上进行改变; 这是可以的,但看到你(希望)有很多自动测试覆盖,改变应该是可以接受的。
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