2009-07-10 8 views
1

こんにちは、パフォーマンスが非常に重要なICAPServer(httpserverと似ています)を作成しました。 DBモジュールはsqlalchemyです。 その後、sqlalchemyのパフォーマンスに関するテストを行いました。その結果、sqlalchemyがDB(Oracle)に50kbのデータを書き込むのに約30msかかることがわかりました。結果が正常であれば分かりません。何か問題でも? しかし、間違いなく、ボトルネックはDB部分から来ているようです。 どのようにsqlalchemyのパフォーマンスを改善できますか?またはOracleを改善するのはDBAの責任ですか?pythonのsqlalchemyのパフォーマンスですか?

ところで、ICAPServerとOracleは、同じPC上にある、と私はあなたが唯一のこれまでのところ、プログラマーとしてSQLAlchemyのをプッシュすることができSQLAlchemyのに不可欠な方法..

答えて

1

sqlalchemyのパフォーマンスにもいくつかの問題がありました。どの方法で使用しているのか最初に理解する必要があります。大きなデータセットの場合は、SQL式言語を使用する方がよいと推奨します。どちらの方法でも、sqlalchemyコードを試して最適化し、Oracleデータベースを最適化することで、何が問題なのかをより正確に把握することができます。 また、データベースでいくつかのテストを行います。

+0

私はORMの部分を使用しており、データはそれほど大きくはありません(コミット()あたり<50kb) – Ryan

+0

"commit()"の前後に印刷タイムスタンプを試しました。 、結果r約30ms – Ryan

+0

もう1つ質問するのを忘れました:データベースがローカルにあるか、ネットワーク経由でアクセスしていますか?これはいくらかの待ち時間を誘発するかもしれない。 – hyperboreean

1

を使用しました。私はあなたのボトルネックがprofileモジュールを使用して、たとえば、第1 対策

+0

しかし、 "50kbのデータをDB(Oracle)に書き込むためにsqlalchemyが30msの間は正常ですか? sqlalchemyのperformacneに関する実績はありますか? ところで、適切なインデックスは既に完了しています。 – Ryan

+0

SQLAlchemyのパフォーマンスの通常のベースラインは何かについてはわかりませんが、30msの50kbはかなり高速です - 私はそれよりも1回のクエリを作成するために往復時間が長くなっています。下のLuperのコメントに同意しなければならないでしょう。それは、減速がどこで起こっているのかを見極める必要があると思います(思い返して、私はそれを言いたくないと思っています)。 –

5

など、テーブルに適切なインデックスを作成するなど、パフォーマンスの残りの部分はあなたのDBA次第であることをあなたとすべきである同意するだろう。

可能な場合は、システムの最も遅い部分を最適化します。

+0

ありがとう、皆さん(皆さんのコメントを追加する方法はわかりませんので、Luperを選択してください) 最も遅い部分はDB-i/oでなければならないと思います。 ICAPAerverは、次のようにしています。 2つのメインステップと2つのスレッドがあります。 第1ステップ:ICAPServerはクライアントからデータを受信し、データをキューに入れる(50kb <1ms) 第2ステップ、キューからの別のスレッドポップデータ、そして 第2ステップが遅すぎると、キューそれらのデータでメモリをいっぱいにします... – Ryan

関連する問題