我在调用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。构建表大小没有问题,因为我们正在空表上进行插入。
答案 0 :(得分:1)
您所描述的是微实例的正常行为。请参阅Micro Instances documentation中的详情。简而言之,微实例可以访问相当数量的CPU - 但是一旦你使用它超过很短的时间,你就会受到限制 hard 。如果这对您的应用程序产生负面影响,那么它就不适合用于低CPU应用程序和/或用户不会注意到额外延迟的应用程序的微实例。
Micro实例是唯一受此类限制影响的实例,因此升级到m1.small
只是一种方法。由于每个t1.micro
实例都支持EBS,因此可以通过停止实例(不终止)从EC2控制台升级,使用“更改实例类型”选择更大的实例,然后重新启动。这将导致新的内部IP /主机名,以及新的公共IP /主机名,除非您使用弹性IP,但您将获得一致的CPU数量。