一些Magento表不是InnoDB,将所有表转换为InnoDB是否安全?


16

我正在使用AWS RDS只读副本。Magento的内存引擎表经常出现问题。对于备份和只读副本,RDS喜欢InnoDB。我可以安全地将所有表更改为InnoDB吗?

此外,我从AWS收到以下警告:

数据库实例magento-monin-prod-db包含尚未迁移到InnoDB的MyISAM表。这些表可能会影响您执行时间点还原的能力。考虑将这些表转换为InnoDB。请参考http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.MySQL.CommonDBATasks.html#MySQL.CommonDBATasks.Tables

合理答案

仍对反馈感兴趣。如果接下来的24小时内没有发现任何问题,我将以此为答案。到目前为止,我在下面执行的步骤似乎是安全的。我最大的担心是Magento的Memory Engine表(以in_tmp结尾的表)及其对索引的影响。

这是我所做的:

  1. SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE (ENGINE = 'Memory' OR ENGINE='MyIsam') AND TABLE_SCHEMA='magento_db'

    • 对我来说,这主要是返回了临时索引表和magento模块表,因此没有太多要关注的关键核心表,也没有足够的表供我轻松地执行另一个alter table(如果有问题的话)。
  2. 对于返回的每个表,我执行: Alter table {table-name} ENGINE=InnoDB;

如果您的表都不是InnoDB,我很想尝试一下。但是,正如我之前说过的,我的实例上只有几个核心表需要修改。


您已经在生产环境中运行了很长时间吗?如果是这样,情况如何-是否引起您任何问题?主要考虑* _tmp索引表,该表目前是MEMORY引擎。
迈克尔·帕金

1
我没有发现任何异常。
TylersSN

太好了,谢谢您的确认-我们也会给予回报,并向您报告。
Michael Parkin

请记住,@ michael parkin我们正在使用Solr搜索。查看其他答案,这可能会对搜索产生潜在影响。
TylersSN

1
我们已经在我们的大多数生产站点(MariaDB 10.0)中运行了此程序,所有表(包括Memory)都作为InnoDB运行-效果很好
Michael Parkin

Answers:


11

假设满足以下条件之一,则可以将数据类型更改为InnoDB:

  1. 您正在使用MySQL 5.6.4+ ,其中InnoDB存储引擎支持全文搜索
  2. 您没有使用默认的Magento搜索功能,该功能依赖于基础MyISAM全文搜索功能。 该功能一开始就很麻烦,默认Magento Search中提供的功能集还有很多不足之处,因此我建议使用LuceneSphinxAlgolia托管最好的搜索。

我个人建议使用Magento数据库修复工具进行此操作,以最大程度地降低风险,并检查其他任何数据库配置漂移或问题。尽管全文限制,但InnoDB是理想的引擎。


1
我们正在使用Solar搜索。因此,就搜索而言,我们应该是清楚的。
TylersSN 2015年

我根本不会认为InnoDB是理想的引擎。如果您有很多搜索查询,与MyISAM相比这是非常慢的。我经常听到InnoDB进行更新的速度更快,而且大多数查询都是更新,因此更新速度更快。我看到完全相反。对于我拥有的每个站点,我都有更多的搜索查询来更新/添加查询。我尝试将所有表切换到InnoDB,页面加载时间从基本上没有延迟(可能是0.1秒)变为10秒!我将所有内容都转换回MyISAM,因为它是提高速度的理想引擎(并且它支持全文搜索)。
蒂姆·埃克尔

蒂姆,我“很同意”,主要是因为我一次又一次地看到@ ben-lessani-sonassi只是被证明是正确的,而MySQL很少会对整体性能造成实质性的拖累,而其他系统即使在负载子800毫秒的响应需要优化但InnoDB的关键是b / C法师核心是写DB〜10X记录每个用户的“查看”动作加Solr的是最好的搜索PERF&qualilty :)
布莱恩“BJ” Hoffpauir Jr.

1
那么,转换为InnoDB的东西如何处理所有这些外键关系,以及依赖于从这些fkey关系中级联删除的删除的完成程度如何?换句话说,您如何处理因没有适当的关系而留下的垃圾?
Fiasco Labs

@FiascoLabs已经有一段时间了,因为我已经签出了该注释线程,但是Q / A的重点是将From MyISAM转换为InnoDB。我猜您提到的具有关系功能的功能可能已经是InnoDB。MyISAM 不支持FK或从MySQL 5.7开始的事务,尽管InnoDB确实支持FK或事务,尽管它稍微偏离了SQL标准
Bryan'BJ'Hoffpauir Jr.


2

我只是将MySQL默认引擎更改为InnoDB,而我的大多数Magento表都奇迹般地将自己转换为InnoDB(有一些仍然是MyISAM,有一些是内存)。

只是以为我会分享这个...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.