mysql(python)AWS查询构建导致速度减慢

时间:2012-12-01 03:06:34

标签: python mysql amazon-web-services mysql-python

我在调用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。构建表大小没有问题,因为我们正在空表上进行插入。

1 个答案:

答案 0 :(得分:1)

您所描述的是微实例的正常行为。请参阅Micro Instances documentation中的详情。简而言之,微实例可以访问相当数量的CPU - 但是一旦你使用它超过很短的时间,你就会受到限制 hard 。如果这对您的应用程序产生负面影响,那么它就不适合用于低CPU应用程序和/或用户不会注意到额外延迟的应用程序的微实例。

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