CQM*_*CQM 6 mysql database-recommendation amazon-rds
我正在对本地 MySQL 数据库进行大型 INSERT
我有 2,000,000 行,现在我真的开始注意到速度变慢了。我一直听说 MySQL 的可扩展性不是很好
我希望这个数据库变得更大,而且我还有很多东西要插入
在这里使用亚马逊微型实例会有什么好处吗?
我不认为我的上传速度会成为瓶颈,所以我的逻辑是他们的分布式处理将使数据库更快。
事实证明,这更多是 CPU 利用率问题,但亚马逊的解决方案是否会更好,也许会针对更多可用处理器进行更优化?使用此逻辑,更昂贵的实例将具有更好的性能
但是这里涉及这么多变量,有没有人有这方面的经验要说?
Rol*_*DBA 10
您应该完全调整 MySQL 环境,尤其是您的 InnoDB 设置。(有关调整技巧,请参阅我的答案底部)。这比与亚马逊争夺 RAM/磁盘中的肘部空间要好得多。我为什么说打架?
如果您刚刚启动了一个 MySQL 的 Amazon RDS 实例,您将受到任何给定的限制。MySQL Amazon RDS 的所有型号的主要选项都相同,但仅在两个方面有所不同
这是我一周前发布的图表:https : //dba.stackexchange.com/a/21498/877
MODEL max_connections innodb_buffer_pool_size
--------- --------------- -----------------------
t1.micro 34 326107136 ( 311M)
m1-small 125 1179648000 ( 1125M, 1.097G)
m1-large 623 5882511360 ( 5610M, 5.479G)
m1-xlarge 1263 11922309120 (11370M, 11.103G)
m2-xlarge 1441 13605273600 (12975M, 12.671G)
m2-2xlarge 2900 27367833600 (26100M, 25.488G)
m2-4xlarge 5816 54892953600 (52350M, 51.123G)
Run Code Online (Sandbox Code Playgroud)
模型越大,InnoDB 缓冲池就越大。哦,是的,预算需要越大。
大多数人不知道的是,所有模型的 InnoDB 事务日志文件的大小都相同:128M。给定默认设置 ( innodb_log_files_in_group = 2),即 256M 的事务日志空间。如果您希望设置其他 InnoDB 选项,请执行以下操作:
MySettings)./rds-modify-db-parameter-group MySettings --parameters "name=<InnoDB Option>,value=???,method=immediate"MySettings那是为了你以后的考虑。
至于您手头的导入问题,AWS RDS 文档提供了许多避免导入缓慢的建议,包括:
我希望您不要LOAD DATA INFILE用于导入。为什么 ?因为,只有 MyISAM 表与批量插入缓冲区(默认为 8M)一起受益于它。InnoDB 没有从中受益。
如果您通过 mysqldump 或您自己的 SQL 加载 InnoDB 表,那么一切都很好。如果您要批量执行大型交易,您可能需要像我解释的那样扩展交易日志。
作为旁注,如果 AWS 正在执行快照,请不要执行任何大型交易。您应该确保正确安排快照,然后提交不在快照窗口内执行任何大型事务。您可以在批量交易期间禁用快照,但AWS RDS 文档对此有一个很大的警告:
警告:如果您需要保留执行时间点恢复的能力,请勿禁用自动备份。禁用自动备份会擦除所有现有备份,因此在禁用自动备份后将无法进行时间点恢复。禁用自动备份是一种性能优化,数据加载不需要。请注意,禁用自动备份不会影响数据库快照。所有现有的数据库快照仍可用于还原。
禁用自动备份将减少大约 25% 的加载时间并减少加载期间所需的存储空间量。如果您要将数据加载到不包含数据的新数据库实例中,禁用备份是一种加快加载速度并避免使用备份所需的额外存储空间的简单方法。但是,如果您要加载到已经包含数据的数据库实例中;您必须权衡禁用备份的好处与失去执行时间点恢复能力的影响。
默认情况下,数据库实例启用了自动备份(保留期为一天)。为了禁用自动备份,您必须将备份保留期设置为零。加载后,您可以通过将备份保留期设置为非零值来重新启用备份。为了启用或禁用备份,Amazon RDS 必须关闭数据库实例并重新启动它以打开或关闭 MySQL 日志记录。
使用 rds-modify-db-instance 命令将备份保留设置为零并立即应用更改。将保留期设置为零需要重启数据库实例,因此请等待重启完成后再继续。
rds-modify-db-instance AcmeRDS --apply-immediately --backup-retention-period=0 您可以使用 rds-describe-db-instances 命令检查数据库实例的状态。该示例显示 AcmeRDS 数据库实例的状态并包括 --headers 选项以显示列标题。
这是我过去关于调优 InnoDB 的帖子:
| 归档时间: |
|
| 查看次数: |
13110 次 |
| 最近记录: |