繁体   English   中英

RDS 实例上的存储过程慢 Mysql

[英]Slow Mysql stored procedure on RDS instance

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

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

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

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

能否让存储过程在 RDS 实例上运行得更快?

编辑 27-01-2015:昨晚存储过程因 memory 异常而崩溃。

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

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

现在存储过程在我的膝上型电脑上运行 12 分钟。 但是我估计在Amazon RDS上还是需要8个小时。 这么大的区别怎么可能?

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

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

在过去几年中,您生产的普通笔记本电脑将比m1.medium实例强大得多。 它为您提供1个vCPU和1.7 GB RAM,在m1行上是“ 1.0-1.2 GHz 2007 Opteron或2007 Xeon处理器的等效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 ;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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