Mysql 表何时从MyISAM更改为InnoDb?
这个问题就像我上一个问题的延续: 但这次我有一些具体的问题。Mysql 表何时从MyISAM更改为InnoDb?,mysql,database,performance,innodb,myisam,Mysql,Database,Performance,Innodb,Myisam,这个问题就像我上一个问题的延续: 但这次我有一些具体的问题。 我们知道,当我们没有很多并发更新(插入)时,MyISAM比InnoDb更快。当我们有许多并发更新时,MyISAM表被锁定,所有其他客户端都应该等待 1) 但是什么时候该从MyISAM转换到InnoDb呢?每秒更新一次?每秒更新10次?每秒更新100次? 2) 举个具体的例子,在我的网站上,我通常每分钟会有几次更新(来自不同的会话),但有时每秒会有~2-3次更新,如果将其中一个表改为InnoDb会更好吗?我想你的问题在你提到的上一个问
我们知道,当我们没有很多并发更新(插入)时,MyISAM比InnoDb更快。当我们有许多并发更新时,MyISAM表被锁定,所有其他客户端都应该等待 1) 但是什么时候该从MyISAM转换到InnoDb呢?每秒更新一次?每秒更新10次?每秒更新100次?
2) 举个具体的例子,在我的网站上,我通常每分钟会有几次更新(来自不同的会话),但有时每秒会有~2-3次更新,如果将其中一个表改为InnoDb会更好吗?我想你的问题在你提到的上一个问题中得到了很好的回答 1) 创建表时。InnoDB提供了比仅仅行级锁定更多的优势。当您有多个sql客户端进行更新时,速度更快,数据丢失/损坏的风险更低,引用完整性等。。。由于每秒只有少量事务(TPS),您不太可能看出性能上的差异,但InnoDB更可靠,可扩展性更好 2) 只有2-3个测试程序集,您不会看到InnoDB和MyISAM之间有任何显著差异。甚至在半古代的硬件上 仅供参考,一个现代化的磁盘驱动器每秒应能处理至少200次更新事务
我建议您仔细阅读,并且。如果可以的话,您可能不应该一次更改一张表 更改整个服务器。这样,您就可以针对仅innodb的工作负载而不是myisam工作负载调整服务器。两者互不兼容(内存缓冲区分配给特定引擎;它们不能共享内存) 假设您有16G的ram,如果您没有MyISAM表,您可能希望使用大约12G作为innodb缓冲池 同样,如果您只有MyISAM表,您可能希望完全关闭innodb,并为MyISAM密钥缓存提供略少于一半(比如6G)的内存 混合myisam innodb服务器需要权衡内存优化 而且,您实际上只想做一次性能测试,而不是每次更改表时 在某些情况下,这是一种大规模的过度简化,在另一些情况下,说“我们知道MyISAM比InnoDb快”是完全错误的 如果您已经为您的服务器正确地调优了InnoDB,并且运行了正确的服务器级硬件,InnoDB应该能够在大多数查询上与MyISAM竞争(不包括完整的表扫描,但是您没有做很多这样的事情,对吧) 也就是说,除非你的数据是“小笑话”大小
如果您发现innodb的插入/更新速度慢得多,请记住,它提供了更好的耐用性级别-如果您将其调整为与MyISAM大致相同的耐用性,那么您将有望看到良好的性能。好的,在我们的主服务器上,我们只使用innodb。但我问的是关于我们共享托管网站的情况,所以我认为你的想法并不适用,因为据我所知,共享托管上的MySql服务器对所有托管用户的所有数据库都有相同的设置。如果你使用共享托管,你就无法期望性能。我希望您的数据库很小,否则将导致性能灾难。共享主机不允许承载繁忙的站点或大型数据库。在这样的网站上,性能通常不是很重要。我们有500Mb的数据库,每天有数百名访问者。查询可能足够复杂。但是这个网站运行正常,也许我们的主人很幸运。@nightcoder:500Mb相对较小。如果您调整了查询,并添加了所有适当的索引,数据库几乎不会注意到您的存在;你不知道你在和谁共享,也不知道他们的坏应用程序在犯什么错误。500M足够小,可以安装在一个规格非常适中的服务器上的ram中;如果您没有足够的性能,只需购买其中一个,这比开发人员评估替代方案的时间要便宜得多。我理解InnoDb的优势,但我认为在共享web主机上,性能和“轻巧”是最重要的。否则我肯定会一直使用InnoDb。@nightcoder:那么你应该一直使用InnoDb。从大局来看,它将比MyISAM“更轻”。