2010-01-16 38 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(祝您好運)。