RDS 实例上的 Mysql 存储过程速度较慢



我在 Amazon RDS 实例上运行缓慢的 Mysql 存储过程时遇到问题。

我目前正在使用存储过程将客户端的Mysql数据库迁移到我们自己的Mysql数据库。两个数据库位于同一个 RDS 实例上。实例类是'db.m1.medium'。

一个存储过程将大约 2.600.000 条记录从客户端数据库中的一个表复制到我们数据库中的两个表。

在我的笔记本电脑上的数据库的本地副本上运行此存储过程时,需要 1 小时 15 分钟。在 RDS 实例上运行此存储过程时,大约需要 19 小时。我正在从同一可用区中的 EC2 实例调用存储过程。

是否可以使存储过程在 RDS 实例上运行得更快?

编辑 27-01-2015:昨晚,由于内存不足异常,存储过程崩溃。

我现在更改了存储过程。对于原始表中的每一行,我将所有插入包装在一个事务中。我还为在存储过程中执行的一些选择查询做了一个解决方法,因此我不必再执行它们了。

我还为 RDS 实例提供了一个 30 GB 的 SSD 驱动器。

现在,存储过程在我的笔记本电脑上运行 12 分钟。但我估计在亚马逊 RDS 上仍然需要 8 个小时。这么大的差异怎么可能?

编辑 28-01-2015:该过程仍在运行。估计时间现已增加到 31 小时 15 分钟。

当我监控我的 RDS 实例时,可用内存量不断下降。存储过程中是否存在内存泄漏?

过去几年制造的普通笔记本电脑将比m1.medium实例强大得多。它为您提供 1 vCPU和 1.7 GB 的 RAM,在 m1 行上是"相当于 1.0-1.2 GHz 2007 皓龙或 2007 至强处理器的 CPU 容量"。

考虑迁移到 m3 实例 - 它们拥有更现代的处理器 - 并升级到具有更多 RAM 的更大实例样式。

如何在 RDS MySQL DB 中编写存储过程?

这是一个例子:

USE `your_db_name`;
DROP procedure IF EXISTS `procedure_method_name_here`;
DELIMITER $$
USE `your_db_name`$$
CREATE PROCEDURE `procedure_method_name_here` ()
BEGIN
  // sql statement
  SELECT * 
    FROM db_name.table_name
    WHERE id = match_ids;
END$$
DELIMITER ;

运行上面的命令。您的程序将为您创建。

最新更新