2012-04-03 5 views
6

간단한 API를 사용하여 HTTP를 사용하여 Python 2 서버와 통신하는 클라이언트 응용 프로그램을 만들었습니다. 서버는 SQLAlchemy의 ORM을 사용하여 해당 HTTP 요청에 대한 데이터를 제공합니다. 문제는 활성 클라이언트가 거의없는 경우에도 CPU 사용량이 상당히 높다는 것입니다. 이 서버는 클라이언트 당 약 1 회의 요청으로 동시에 수백 개의 클라이언트를 서비스 할 수 있어야하므로 관리가 가능해야합니다 (또는 그렇게되기를 바랍니다).SQLAlchemy 성능을 향상시키는 방법?

어떻게 성능을 향상시킬 수 있습니까? 나는 cProfile이 이것을 아주 분명하게 보여주기 때문에 문제가 ORM이라는 것을 안다. 하나의 질의는 상당히 이상하게 보이는 10000 개의 파이썬 명령어를 실행합니다. 나는 다른 데이터베이스 엔진/백엔드에 연결하고 재미만을 위해 Pypy로 인터프리터를 변경했지만 분명히 원래의 문제를 해결하지 못했고 성능을 향상시키지 못했습니다.

내가 뭘 잘못하고 있니? 나는 이것이 정말로 "우물"이라고 희망한다. 문제.

내 관계가 다른 유형이어야합니까? 열망하는, 게으른, 역동적 인, 등? 지금은 특별히 아무것도 지정하지 않았습니다.

도움 주시면 감사하겠습니다.

+5

일부 장소를 시작하는 데 대한 내 대답 http://stackoverflow.com/questions/1171166/how-can-i-profile-a-sqlalchemy-powered-application/1175677#1175677 좀 봐 – zzzeek

답변

0

쿼리가 동적 인 것은 항상 반환되는 개체의 한 유형 일까 아니면 많은 다른 모델입니까? 얼마나 많은 행을 반환합니까? 열 수나 행 수를 제한 할 수 있습니까? 방대한 양의 데이터가 이미 쉽게 수정되었다고 가정 할 때, 열을 올바른 데이터 유형으로 변환하는 Python조차도 상당한 양의 오버 헤드를 유발할 수 있습니다.

또한 빠른 프로젝트에만 SQLAlchemy를 사용했지만 결과를 기다리는 동안 CPU 사용량이 급증 할 수 있습니까? 이것이 문제라면 실제 실행되는 쿼리를 프로파일 링하여 제대로 인덱싱되고 orm이 최적의 방법으로 생성하는지 확인하는 것이 좋습니다.

+0

SQL 쿼리는 다음과 같습니다. 아주 적고 아주 작은 주머니를 반환합니다. 대부분의 시간은 ORM 자체에 소비됩니다. – Svenstaro

관련 문제