繁体   English   中英

更改默认存储引擎Amazon RDS MariaDB

[英]Changing Default Storage Engine Amazon RDS MariaDB

我有数百个大表,这些表已经从MySQL数据库(使用亚马逊迁移服务)迁移到RDS MariaDB。 所有的存储引擎都从MyISAM迁移到InnoDB。 这会对性能产生灾难性的影响。

简而言之,我希望将默认存储引擎更改为MyISAM,然后重新迁移所有表。 我也对其他有关如何执行此操作的想法持开放态度(例如在迁移工具中使用某种设置)。 我并不是真的想创建一个脚本来更改它们,因为这意味着每次导入数据时都需要这样做。

我尝试更改ParameterGroup default_storage_engine,但是当我进入正在运行的实例的ParameterGroup时,默认存储引擎将显示为只读。 AWS控制台截图

我也尝试过创建一个新的参数组,并且同样发生。 该值显示为“可修改: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的优化查询比针对MyISAM的表扫描的性能要好得多。

我鼓励您找出查询优化并坚持使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM