我已经从我的MariaDB数据库(使用MySQL迁移服务)迁移到了RDS数据库中的数百个大型表。所有的存储引擎都从MyISAM到InnoDB。这对性能有灾难性的影响。
简而言之,我希望将默认存储引擎更改为MyISAM,然后重新迁移所有表。对于如何做到这一点,我对其他任何想法都持开放态度(比如在迁移工具中使用某种设置)。我真的不想创建一个脚本来改变它们,因为这意味着每次导入数据时我都需要这样做。
我尝试过更改ParameterGroup default_storage_engine,但是当我进入正在运行的实例的ParameterGroup时,默认存储引擎显示为只读。

我也尝试过创建一个新的参数组,同样的情况也发生了。该值显示为“可修改的: false”。
任何帮助都很感激。我看过其他答案,但我不认为修改my.cnf与RDS相关。如果是,请告诉我。
发布于 2017-09-23 17:03:34
显然,RDS不允许您更改该参数。
您可以将每个表更改为MyISAM,每次一个:
ALTER TABLE MyTable ENGINE=MyISAM;您可以获得需要更改的表的列表:
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE='InnoDB';对于未来的表,不要依赖默认引擎。使用Create语句中显式命名的引擎创建表。
不过,我要提醒您: MyISAM正被MySQL逐步淘汰。它不支持并发写入、行级锁定、事务或原子更改。InnoDB一次又一次地被证明在性能上优于MyISAM,除非在很少的情况下:
SELECT COUNT(*) FROM MyTable;,因为MyISAM将这个统计数据保存在每个表中。诚然,这是InnoDB或任何MVCC体系结构的一个大弱点。我鼓励您找出您的查询优化并坚持使用InnoDB。
发布于 2017-09-23 17:23:02
突然切换到InnoDB时,一个常见的性能问题与“事务”有关。
可能发生的情况是,由于autocommit = ON,每个查询都变成了自己的事务。(不要把它变成OFF,这会导致更糟的问题。)您需要理解事务,至少要足够将语句合并到如下所示的块中
BEGIN;
multiple statements, usually more than one, but not a huge number
COMMIT;这(在许多情况下)将恢复一堆丢失的性能。
关于转换的更多讨论是http://mysql.rjweb.org/doc.php/myisam2innodb。
https://stackoverflow.com/questions/46381942
复制相似问题