Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 表何时从MyISAM更改为InnoDb?_Mysql_Database_Performance_Innodb_Myisam - Fatal编程技术网

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“更轻”。