3

在调用 commit 之前,我执行了以下代码 25 次(非常简略)。

def query_and_insert(conn):
    c = conn.cursor()
    result = c.execute("SELECT ...")
    result = modify_result(result)
    c.execute("INSERT ...".format(result))
    result.close()

if __name__ == "__main__":
    conn = MySQLDB.connect(...)
    loop 25 times:
        query_and_insert(conn)
    conn.commit()
    conn.close()

在前 15 个左右的查询之后,速度显着降低(从每个查询/插入组合 < 1 秒到 > 20 秒)。问题绝对不是我正在执行的查询的复杂性。将最后 10 个查询移到开头使它们运行得同样快,然后最后一个查询再次显着减慢。

在 AWS 上耗时过长的进程是否存在某种限制或优先级降低?有没有办法解决?

编辑:我们在 Amazon EC2 上使用 MicroInstance。构建表大小没有问题,因为我们在空表上进行插入。

4

1 回答 1

1

您所描述的是微实例的正常行为。在Micro Instances 文档中查看更多信息。简而言之,微型实例可以访问相当数量的 CPU——但是一旦你使用它超过很短的一段时间,你就会受到严重的限制。如果这对您的应用程序产生不利影响,那么它根本不适合微型实例,这些实例旨在用于低 CPU 应用程序和/或用户不会注意到增加延迟的应用程序。

微型实例是唯一受此类限制的实例,因此升级到 am1.small将是一种出路。由于每个实例都由 EBS 支持,因此可以通过停止实例(终止)、使用“更改实例类型”选择更大的实例并重新启动来t1.micro从 EC2 控制台升级。这将产生一个新的内部 IP/主机名,以及一个新的公共 IP/主机名,除非您使用弹性 IP,但您将获得一致数量的 CPU。

于 2012-12-01T03:50:50.073 回答