使用innoDB的MySQL中具有相同数据的本地和生产环境之间的执行时间差异极大

使用innoDB的MySQL中具有相同数据的本地和生产环境之间的执行时间差异极大,mysql,performance,innodb,database-performance,alter-table,Mysql,Performance,Innodb,Database Performance,Alter Table,我正在尝试执行一个altertable,将一个表转换为UTF-8。我从生产环境中的一个非常大的表中导出了所有数据,并将其导入到本地mySQL实例中,以测试这需要多少时间,然后自己进行准备 该表包含3300万行,但只包含3列 以下是转换的查询: ALTER TABLE image\u public\u key转换为字符集utf8 COLLATE utf8\u general\u ci,强制 当我在本地实例中运行该查询时,它运行在带有SSD的小型笔记本电脑上,大约需要5分钟。没什么大不了的 当我在生

我正在尝试执行一个
altertable
,将一个表转换为UTF-8。我从生产环境中的一个非常大的表中导出了所有数据,并将其导入到本地mySQL实例中,以测试这需要多少时间,然后自己进行准备

该表包含3300万行,但只包含3列

以下是转换的查询:

ALTER TABLE image\u public\u key转换为字符集utf8 COLLATE utf8\u general\u ci,强制

当我在本地实例中运行该查询时,它运行在带有SSD的小型笔记本电脑上,大约需要5分钟。没什么大不了的

当我在生产中使用AmazonRDS和
db.r3.xlarge
实例在同一个表中运行相同的查询时,需要55分钟(这是时间的11倍!)

我试图理解一台小型笔记本电脑是如何打败这样一台机器的(4cpu+30GB RAM+800GB内存,目前可用300GB)

这可能是亚马逊方面的限制吗?一些默认变量?任何帮助都将不胜感激。我需要在多个表上运行相同的查询,不能将生产暂停这么长时间

编辑


我可以补充一点,任务在状态
copy to tmp
下停留了很长时间。不确定这是否是有用的信息。

在AWS上,DB可能在
ALTER
之前进行备份?@SamChats我不知道,但值得一看问题为什么
image\u public\u key
需要utf8作为校对。。。使用ascii作为校对将更有意义,因为它使用更少的字节bs utf8。。。更少的字节也意味着更高的逻辑性能。“我需要在多个表上运行相同的查询,不能将生产暂停这么长时间…”尝试强制ALTER使用,并添加
算法=INPLACE,LOCK=NONE
那么在ALTER期间,该表对于其他客户端应该仍然可用。。如果
ALGORITHM=INPLACE,则LOCK=NONE
是不允许的或不可能的,那么您将得到一个错误。“我试图理解一台小型笔记本电脑是如何打败这样一台机器的(4cpu+30GB RAM+800GB内存总量,目前300GB可用)。”很可能您的MySQL配置对于
db.r3.xlarge
系统来说不是最佳配置,也可能只是过度销售,因为许多实例都在同一个系统/(nas)磁盘上运行,而这些磁盘无法处理所有运行查询所需的IOPS?。。在这两种情况下,这个答案都是与亚马逊联系的话题吗?或者在AWS上获取MySQL配置帮助,DB可能在
更改之前进行备份,我不知道,但值得一看问题为什么
图像\u公钥
需要utf8作为校对。。。使用ascii作为校对将更有意义,因为它使用更少的字节bs utf8。。。更少的字节也意味着更高的逻辑性能。“我需要在多个表上运行相同的查询,不能将生产暂停这么长时间…”尝试强制ALTER使用,并添加
算法=INPLACE,LOCK=NONE
那么在ALTER期间,该表对于其他客户端应该仍然可用。。如果
ALGORITHM=INPLACE,则LOCK=NONE
是不允许的或不可能的,那么您将得到一个错误。“我试图理解一台小型笔记本电脑是如何打败这样一台机器的(4cpu+30GB RAM+800GB内存总量,目前300GB可用)。”很可能您的MySQL配置对于
db.r3.xlarge
系统来说不是最佳配置,也可能只是过度销售,因为许多实例都在同一个系统/(nas)磁盘上运行,而这些磁盘无法处理所有运行查询所需的IOPS?。。在这两种情况下,这个答案都是与亚马逊联系的话题吗?或者转到获取MySQL配置帮助