这个问题就像我上一个问题的延续: 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次更新?
答案 0 :(得分:3)
我认为你提到的上一个问题已经回答了你的问题。
1)创建表格时。 InnoDB提供的优势不仅仅是行级锁定。当你有多个sql客户端进行更新时,速度更快,数据丢失/损坏的风险更小,参照完整性等...只需每秒几个事务(TPS)你就不太可能分辨出性能差异,但是InnoDB更可靠,更好地扩展。
2)只有2-3 TPS你不会看到InnoDB和MyISAM之间有任何显着差异。即使是在半古老的硬件上也是如此。
仅供参考,现代磁盘驱动器应该能够每秒处理至少约200次更新事务。
答案 1 :(得分:1)
如果可以的话,你可能不应该一次改变一个表。
更改整个服务器。这样,您可以针对仅限innodb的工作负载而不是myisam工作负载调整服务器。两者互不兼容(为特定引擎分配内存缓冲区;它们不能共享内存)。
假设您有16G的ram,如果您没有MyISAM表,您可能希望在innodb缓冲池中使用大约12G。
同样,如果你只有MyISAM表,你可能想要完全关闭innodb,并给你的myisam密钥缓存少一半(比如说6G)。
混合的myisam-innodb服务器需要权衡内存调整。
此外,您只想进行一次性能测试,而不是每次更换表格时都会进行性能测试。
在某些情况下,这是一个大规模的过度简化,而在其他人中说“我们知道MyISAM比InnoDb更快”是完全错误的。
如果你已经为你的服务器正确调整了InnoDB并运行了适当的服务器级硬件,那么InnoDB应该能够在大多数查询中与MyISAM竞争(不包括全表扫描,但是你没有做很多这些,对吧)。
即使你的数据是“琐碎的笑话”大小。
如果您发现innodb对于插入/更新来说要慢得多,请记住它提供了更好的耐用性 - 如果您将其调整为与MyISAM大致相同的持久性,那么您将看到良好的性能。