2010-01-16 75 views
2

我有一个主要for循环的脚本,重复大约15k次。在这个循环中,它查询本地MySQL数据库并在本地存储库上执行SVN更新。我把SVN版本库放在一张RAMdisk中,大部分时间似乎都花在读取/写入磁盘上。查找Python和MySQL脚本中的性能瓶颈

现在我有一个以基本相同的速度运行的脚本,但该脚本的CPU利用率永远不会超过10%。

ProcessExplorer显示,mysqld也不会占用几乎所有的CPU时间或读取/写入磁盘。

你会采取哪些步骤来找出瓶颈在哪里?

回答

4

做SQL查询在for循环15000次是在每一种语言的瓶颈..

有你再次查询每一次的原因吗?如果您在for循环之前执行单个查询,然后遍历结果集和SVN部分,则会看到速度急剧增加。

但我怀疑你会得到更高的CPU使用率。原因是你没有进行计算,但主要是IO。 顺便说一下,你不能测量它在mysqld cpu的使用情况,因为它在实际代码中不是查询的复杂性,而是它们的计数和服务器引擎的响应延迟。所以你会看到只有非常短的,不昂贵的查询,尽管如此,总结时间。

1

配置您的Python代码。这会告诉你每个函数/方法调用需要多长时间。如果这是查询MySQL数据库的方法调用,那么您将有一个线索在哪里寻找。但它也可能是别的。无论如何,剖析是解决这些问题的常用方法。

+0

我学会了如何配置感谢你,但我得到的结果是不确定的(或者我仍然不知道如何解释它们)。 – greye 2010-01-19 06:20:35

1

可以这么说,svn update在完成运行后等待了整整一秒,因此文件修改时间戳会“过去”(因为许多文件系统没有时间戳粒度小于1秒)。你可以通过谷歌搜索“svn sleep_for_timestamps”找到更多关于它的信息。

我没有任何明显的解决方案建议。如果这确实对性能至关重要,那么您可以:1)不会像您一样频繁更新2)尝试使用较低级别的Subversion API(祝您好运)。