2009-07-10 8 views
1

HI, Ich habe einen ICAPServer (ähnlich mit httpserver), für die die Leistung sehr wichtig ist. Das DB-Modul ist sqlalchemy. Ich machte dann einen Test über die Leistung von sqlalchemy, als Ergebnis fand ich, dass es etwa 30 ms dauert für sqlalchemy < 50kb Daten zu DB (Oracle) zu schreiben, ich weiß nicht, ob das Ergebnis normal ist, oder ich tat etwas stimmt nicht? ABER, egal richtig oder falsch, es scheint, dass der Flaschenhals aus dem DB-Teil kommt. WIE kann ich die Leistung von sqlalchemy verbessern? Oder es liegt an DBA, Oracle zu verbessern?python sqlalchemy leistung?

BTW, ICAPServer und Oracle sind auf dem gleichen PC, und ich verwendet, um die wesentliche Art und Weise von sqlalchemy ..

Antwort

1

Ich hatte einige Probleme mit der Leistung von sqlalchemy - ich denke, Sie sollten zuerst herausfinden, auf welche Weise Sie es verwenden ... sie empfehlen, dass für große Datenmengen besser ist, die SQL-Ausdruck Sprache zu verwenden. Versuchen oder optimieren Sie den SQL-Code und optimieren Sie die Oracle-Datenbank, damit Sie besser herausfinden können, was falsch ist. Führen Sie auch einige Tests für die Datenbank durch.

+0

Ich benutze den ORM-Teil, und die Daten sind nicht so groß (<50kb per commit()) – Ryan

+0

Ich habe versucht, Zeitstempel vor und nach "commit()" zu drucken, nehme den Zeitunterschied , Ergebnisse r über 30ms – Ryan

+0

Ich habe vergessen, eine weitere Sache zu fragen: ist Ihre Datenbank lokal oder greifen Sie über ein Netzwerk darauf zu. Dies könnte auch eine gewisse Latenz verursachen. – hyperboreean

1

Sie nur SQLAlchemy so weit als Programmierer schieben kann. Ich würde mit Ihnen einverstanden, dass der Rest der Leistung bis zu Ihrem DBA ist, einschließlich der richtigen Indizes für Tabellen erstellen, usw.

+0

Aber ist "30ms für sqlalchemy <50kb Daten in DB (Oracle) zu schreiben" normal? Gibt es eine Erfolgsbilanz über Performacne von Sqlalchemy? BTW, Richtige Indizes Dinge wurden bereits gemacht. – Ryan

+0

Ich bin mir nicht sicher, was eine normale Basis für SQLAlchemy Leistung ist, aber 50 kb in 30ms scheint ziemlich schnell - ich hatte längere Round-Trip-Zeiten, um eine einzige Abfrage als das zu machen. Ich würde Luper's Kommentar unten zustimmen müssen, dass Sie sich wahrscheinlich profilieren sollten, um zu sehen, wo die Verlangsamung ist (im Nachhinein bin ich etwas beschämt, dass ich nicht daran gedacht hätte, das zu erwähnen). –

5

Sie sollten zunächst Maßnahme, wo Ihr Engpass ist, beispielsweise mit dem profile Modul.

Dann optimieren, wenn Sie die Möglichkeit haben, den langsamsten Teil des Systems.

+0

Vielen Dank (ich weiß nicht, wie ich Kommentare für euch alle hinzufügen kann, also wähle Luper) Ich denke, der langsamste Teil muss DB-i/o sein, und ich würde gerne beschreiben, was meine ICAPAerver tut, wie folgt: Es gibt zwei Hauptschritte und zwei Thread; 1. Schritt, ICAPServer empfängt Daten von Clients, legen Sie die Daten in eine Warteschlange (50kb <1ms) 2. Schritt, einen anderen Thread Pop-Daten aus der Warteschlange, und schreibe sie in DB SO, wenn 2. Schritt zu langsam ist, die Warteschlange füllt den Speicher mit diesen Daten ... – Ryan