mysql (python) AWS 查询堆积导致速度变慢

Posted

技术标签:

【中文标题】mysql (python) AWS 查询堆积导致速度变慢【英文标题】:mysql (python) AWS query build-up causes slowdown 【发布时间】:2012-11-19 07:22:48 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

啊,如果我给 mysqld 更多内存并尝试使用一些线程来减少使用的总时间会有所帮助吗?不过感谢您的回答! 如果您可以将 CPU 使用率控制在不可见的阈值以下,那么当然可以。但是,如果查询花费的时间稍长,或者与 cron 作业同时运行,或者发生其他任何事情并且您受到限制,那么您的应用程序将受到影响,直到 CPU 时间返回。

以上是关于mysql (python) AWS 查询堆积导致速度变慢的主要内容,如果未能解决你的问题,请参考以下文章

Oracle迁移到MySQL性能下降的注意点(转)

MySQL Insert语句单个批次数量过多导致的CPU性能问题分析

MySQL Insert语句单个批次数量过多导致的CPU性能问题分析

rocketmq控制台跳过堆积是啥意思

AWS EMR 未生成 NameNode FsImage

PDO 的 LastInsertID 会破坏 AWS 复制吗?