2012-04-03 33 views
6

我做了一個客戶端應用程序,它使用HTTP通過一個簡單的API與Python 2服務器進行通信。服務器相當廣泛地使用SQLAlchemy的ORM來爲這些HTTP請求提供數據。問題是即使只有很少的活動客戶端,我的CPU使用率也非常高。這臺服務器應該能夠在每個客戶端大約1次請求的同時爲幾百個客戶端提供服務,所以它應該仍然是可管理的(或者我希望)。如何提高SQLAlchemy的性能?

我該如何提高性能?我知道問題是ORM,因爲cProfile很清楚地顯示了這一點。一個查詢顯然會執行大約10000條Python指令,這似乎很奇怪。我嘗試插入不同的數據庫引擎/後端,並將解釋器更改爲Pypy,但它顯然無助於原始問題,也未改善性能。

我在這裏做錯了什麼?我真的希望這是一個「好的,杜!」問題。

我的關係應該是不同的類型?渴望,懶惰,動態等?現在,我沒有具體說明任何內容。

非常感謝。

+5

看看我的答案http://stackoverflow.com/questions/1171166/how-can-i-profile-a-sqlalchemy-powered-application/1175677#1175677一些地方開始 – zzzeek 2012-04-03 19:38:05

回答

0

查詢的動態性如何?它只是一種總是被返回的對象類型,或者是多種不同的模型。你有多少行回來?你可以限制列數或行數嗎?假設您已經修復了一切問題,那麼即使python將列轉換爲正確的數據類型也會導致大量開銷。

另外我SQLAlchemy只適用於快速項目,但有可能在等待結果時CPU使用率是尖峯的?如果這是您的問題,您可能需要深入分析正在運行的實際查詢並確保它們已正確編制索引,並且orm以最佳方式生成它們。

+0

SQL查詢是很少,並返回非常小的物品口袋。大部分時間都花在ORM本身上。 – Svenstaro 2012-04-20 08:54:24