在Python和MySQL脚本中查找性能瓶颈

时间:2010-01-16 07:40:01

标签: python mysql performance svn

我有一个主for循环的脚本,重复大约15k次。在此循环中,它查询本地MySQL数据库并在本地存储库上执行SVN更新。我把SVN存储库放在RAMdisk中,因为大部分时间似乎花在读/写磁盘上。

现在我的脚本运行速度基本相同,但该脚本的CPU利用率从未超过10%。

ProcessExplorer显示mysqld也几乎不占用任何CPU时间或读取/写入大量磁盘。

您将采取哪些步骤来确定瓶颈在哪里?

3 个答案:

答案 0 :(得分:4)

在for循环中执行15k次SQL查询是每种语言的瓶颈..

你有没有理由再次查询?如果在for循环之前执行单个查询,然后遍历结果集和SVN部分,您将看到速度的显着提高。

但我怀疑你会获得更高的CPU使用率。原因是你没有做计算,但主要是IO。 顺便说一下,你无法在mysqld cpu使用中测量它,因为它在实际代码中不是查询的复杂性,而是它们的计数和服务器引擎的等待时间。因此,您只会看到非常简短且不昂贵的查询,但这些查询会及时总结。

答案 1 :(得分:1)

描述您的Python代码。这将显示每个函数/方法调用需要多长时间。如果这是查询MySQL数据库的方法调用,你将有一个线索在哪里查看。但它也可能是别的东西。无论如何,分析是解决此类问题的常用方法。

答案 2 :(得分:1)

可以说,它是“众所周知的”,svn update在完成运行后等待一整秒,以便文件修改时间戳“过去”(因为许多文件系统不会时间戳粒度小于一秒)。您可以通过Google搜索“svn sleep_for_timestamps”找到有关它的更多信息。

我没有任何明显的解决方案可供建议。如果这对性能至关重要,你可以:1)不要像你一样经常更新2)尝试使用更低级别的Subversion API(祝你好运)。