我有一个主for
循环的脚本,重复大约15k次。在此循环中,它查询本地MySQL数据库并在本地存储库上执行SVN更新。我把SVN存储库放在RAMdisk中,因为大部分时间似乎花在读/写磁盘上。
现在我的脚本运行速度基本相同,但该脚本的CPU利用率从未超过10%。
ProcessExplorer显示mysqld也几乎不占用任何CPU时间或读取/写入大量磁盘。
您将采取哪些步骤来确定瓶颈在哪里?
答案 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(祝你好运)。