![](/img/trans.png)
[英]Amazon RDS Maria DB “Unknown storage engine 'XtraDB'”
[英]Changing Default Storage Engine Amazon RDS MariaDB
我有数百个大表,这些表已经从MySQL数据库(使用亚马逊迁移服务)迁移到RDS MariaDB。 所有的存储引擎都从MyISAM迁移到InnoDB。 这会对性能产生灾难性的影响。
简而言之,我希望将默认存储引擎更改为MyISAM,然后重新迁移所有表。 我也对其他有关如何执行此操作的想法持开放态度(例如在迁移工具中使用某种设置)。 我并不是真的想创建一个脚本来更改它们,因为这意味着每次导入数据时都需要这样做。
我尝试更改ParameterGroup default_storage_engine,但是当我进入正在运行的实例的ParameterGroup时,默认存储引擎将显示为只读。
我也尝试过创建一个新的参数组,并且同样发生。 该值显示为“可修改:false”。
任何帮助,不胜感激。 我已经查看了其他答案,但是我认为修改my.cnf与RDS没有关系。 如果是,请告诉我。
显然,RDS不允许您更改该参数。
您可以一次将每个表更改为MyISAM:
ALTER TABLE MyTable ENGINE=MyISAM;
您可以获得需要更改的表的列表:
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE='InnoDB';
对于将来的表,不要依赖默认引擎。 使用在CREATE TABLE语句中显式命名的引擎创建表。
但是,我会警告您:MySQL正在逐步淘汰MyISAM。 它不支持并发写入,行级锁定,事务或原子更改。 除了极少数情况之外,InnoDB的性能一再显示优于MyISAM:
SELECT COUNT(*) FROM MyTable;
因为MyISAM将此统计信息保留在每个表中。 诚然,这是InnoDB或任何MVCC架构的最大弱点。 我鼓励您找出查询优化并坚持使用InnoDB。
突然切换到InnoDB时,常见的性能问题与“事务”有关。
可能发生的情况是,由于autocommit = ON
,每个查询都变成了自己的事务。 (不要将其OFF
,这会导致更严重的问题。)您需要了解事务,至少要足以将语句组合成块之类,例如
BEGIN;
multiple statements, usually more than one, but not a huge number
COMMIT;
这(在许多情况下)将恢复大量的性能损失。
有关转换的更多讨论在这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.