首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候可以将表从MyISAM更改为InnoDb?

什么时候可以将表从MyISAM更改为InnoDb?
EN

Stack Overflow用户
提问于 2009-11-13 23:11:49
回答 2查看 1.2K关注 0票数 6

这个问题就像是我上一个问题的延续: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)举一个具体的例子,在我的网站上,我通常每分钟有几次更新(来自不同的会话),但有时可能是每秒2-3次更新,换成InnoDb是不是更好?

EN

回答 2

Stack Overflow用户

发布于 2009-11-14 00:20:35

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

1)创建表时。InnoDB提供了比仅仅行级锁定更多的优点。当您有多个sql客户端执行更新时,速度更快,数据丢失/损坏的风险更小,引用完整性等。由于每秒只有几个事务(TPS),您不太可能区分性能的差异,但InnoDB更可靠,可伸缩性更好。

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

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

我建议你去读一读InnoDBMVCCACID

票数 3
EN

Stack Overflow用户

发布于 2009-11-14 00:29:39

如果可以的话,您可能不应该一次更改一个表。

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

假设你有16G的ram,如果你没有MyISAM表,你可能会想要使用大约12G的内存来创建一个innodb缓冲池。

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

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

而且,你真的只想做一次性能测试,而不是每次你改变一个表。

在某些情况下,说“我们知道MyISAM比InnoDb快”,这是一个巨大的过度简化,而在其他情况下,这显然是错误的。

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

也就是说,除非您的数据是“微不足道的笑话”大小。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1729806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档