2017-09-23 85 views
1

我有数百个大型表,我已经从我的MySQL DB(使用亚马逊迁移服务)迁移到RDS MariaDB。所有的存储引擎都从MyISAM到InnoDB。这对性能有着灾难性的影响。更改默认存储引擎Amazon RDS MariaDB

简而言之,我期待将默认存储引擎更改为MyISAM,然后重新迁移所有表。我愿意接受任何有关如何做到这一点的其他想法(例如在迁移工具中使用某种设置)。我不想创建一个脚本来改变它们,因为这意味着每次我导入数据时都需要这样做。

我试着改变ParameterGroup的default_storage_engine,但是当我进入我运行的实例的ParameterGroup时,默认存储引擎显示为只读。 AWS Console Screenshot

我试过创建一个新的参数组,以及发生同样的情况。该值显示为“可修改:false”。

任何帮助非常感谢。我查看了其他答案,但我不认为修改my.cnf与RDS相关。如果是这样,请让我知道。

回答

2

显然RDS不允许您更改该参数。

您可以更改一次每个表在MyISAM,一:

ALTER TABLE MyTable ENGINE=MyISAM; 

你可以得到你需要改变你的表的列表:

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE='InnoDB'; 

对于未来的表,不要依赖默认引擎。使用在CREATE TABLE语句中显式指定的引擎创建表。

但是我会提醒你的是:MyISAM正在被MySQL逐步淘汰。它不支持并发写入,行级锁定,事务或原子更改。 InnoDB的显示遍地是性能优越,在MyISAM,除了在难以察觉的情况:

  • SELECT COUNT(*) FROM MyTable;因为MyISAM数据保持这个统计内置到每个表。无可否认,这是InnoDB或任何MVCC体系结构的一大缺陷。
  • 表扫描。但是,无论如何你都不应该进行表扫描,你应该做索引查找。针对InnoDB的优化查询通常比针对MyISAM的表扫描性能要好得多。

我会鼓励你弄清楚你的查询优化并坚持使用InnoDB。

+2

MyISAM也受到RDS文档的强烈阻止,因为它似乎与RDS快照备份和时间点恢复的基本机制不兼容 - 这些似乎至少部分基于InnoDB的能力当MySQL从磁盘快照创建的备份中恢复后首次唤醒时,会从类似崩溃的状态中恢复。 MyISAM表格不能很好地处理这个问题。 (轶事观察表明,RDS中的时间点和快照恢复似乎在启动时经历了崩溃恢复。) –

0

当突然切换到InnoDB时,常见的性能问题与“事务”有关。

可能是因为autocommit = ON,每个查询都变成了自己的事务。 (不要把它OFF,这将导致更严重的问题。)你需要了解的交易,至少足以语句一起块像

BEGIN; 
multiple statements, usually more than one, but not a huge number 
COMMIT; 

结合这(在许多情况下)将恢复一堆失去的表现。

关于转换的更多讨论是here