6

这个问题就像我之前的问题的延续: InnoDb 是否比 MyISAM 更适合频繁的并发更新和插入?

但这次我有具体的问题。
当我们没有很多并发更新(插入)时,我们知道 MyISAM 比 InnoDb 快。当我们有许多并发更新时,MyISAM 表被锁定,所有其他客户端都应该等待。

1) 但是什么时候应该从 MyISAM 更改为 InnoDb?每秒更新1次?每秒更新 10 次?每秒更新 100 次?
2)举一个具体的例子,将我网站上的一个表更改为 InnoDb 会更好吗?我通常每分钟有几个更新(来自不同的会话),但有时它可能是每秒 ~2-3 次更新?

4

2 回答 2

3

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

1) 创建表时。InnoDB 提供了比仅仅行级锁定更多的优势。当您有多个 sql 客户端进行更新时,速度更快,数据丢失/损坏的风险更小,引用完整性等......只有每秒几笔交易(TPS),您不太可能分辨出性能的差异,但是 InnoDB更可靠并且可以更好地扩展。

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

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

我建议您阅读InnoDBMVCCACID

于 2009-11-13T16:20:34.943 回答
1

如果可以的话,您可能不应该一次更改一张桌子。

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

假设您有 16G 的 ram,您可能希望使用大约 12G 的内存作为 innodb 缓冲池,前提是您没有 MyISAM 表。

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

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

此外,您真的只想进行一次性能测试,而不是每次更改表时。

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

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

也就是说,除非您的数据是“琐碎的笑话”大小。

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

于 2009-11-13T16:29:38.547 回答