3

「ODP.net を試してみましたか?」というメッセージを受け取る前に、答え、はい、私はそれを持っており、現在使用しています。

OracleからSQLサーバーにデータを移動しており(重要ではありません)、Oracle接続でデータリーダーを使用しています。大きなテーブルはCRAWLINGです。1 秒あたり 10 レコードの場合もあります。パフォーマンスの問題に気付いたとき、テーブル全体で単純な Reader.Read() 呼び出しを実行するだけにソース コードを減らしました。MS と Oracle ODP .net クライアントの両方を試しました。私は現在、11g Instant Client、64bit on win7 64bit、8 ギガの RAM、およびすべてのグッズを使用しています。私はローカル ネットワークで使用しており、現在は VPN を使用していますが、パフォーマンスは基本的に同じです。プリフェッチ サイズを調整しましたが、結果はありません。

Oracle Sql DEveloper ツールでデータのエクスポート機能を実行し、データベース全体のすべてのデータを、この同じマシン上で、同じネットワークを介して約 100 倍の速度でエクスポートできます。

.net アプリを Oracle サーバーにコピーして、同じパフォーマンス テストを実行すると、1 秒もかからずに完了します。

したがって、ネットワーク自体が遅いのではなく、データの量ではなく (SqlDeveloper エクスポートで示されているように)、.net コード自体でも Oracle db でもありません (サーバー上で実行して示されているように)。任意のネットワークで使用される Datareader の組み合わせである必要があります。

インスタント クライアントのインストールですか? 本格的なクライアントのパフォーマンスは向上しますか? 64 ビットのクライアントが混乱していませんか? 本当に途方に暮れています。

アップデート:

それ以来、32ビット用にコンパイルされた同じアプリを実行し、「完全な」OracleクライアントがインストールされているWindows XPの仮想PCインスタンスで実行しました(明らかに32ビットバージョン)。VM のパフォーマンスが低下しても、ほぼ 10 倍高速に実行されました。したがって、間違いなくインスタント クライアントに何らかの問題があり、特に 64 ビットのインスタント クライアントに問題があると思います。これを確認する最後のテストは、この同じマシンに 32 ビットのインスタント クライアントをインストールして、再度実行することです。時間が合えば…

4

4 に答える 4

0

「.netアプリをOracleサーバーにコピーして、同じパフォーマンステストを実行すると、1秒以内に終了します。」

これがソリューションのルートです。テストの制御要素である同じアプリは、ある場所から別の場所に移動され、変更される唯一の変数はネットワークです。したがって、2つの可能性があります。可能性の1つは、ネットワーク自体が問題であり、速度が遅すぎることです。2つ目は、アプリケーションとそれがネットワークとどのようにインターフェースしているかが、そのパフォーマンスに拮抗することです。

確かに、サーバーでの実行とVPN全体の場所との違いがあります。サーバーでエクスポート機能を使用すると、可能な限りrawアクセスに近くなり、VPN接続ホストで同じアクションを実行するために必要な時間の長さの違いに基づいてネットワーク分散コンポーネントを測定できるようになります。

しかし、あなたが指摘したように、これはエンチャーの時間差を説明することはできません。アプリケーションはWANに対応していない可能性があります。これは通常、情報の送受信に必要なターン数が多すぎ、各データフローの情報量が必要以上に大きくなる可能性があることを意味します。一括エクスポートからアプリケーションへの基本的なハンドシェイクメカニズムが完全に異なる可能性があります。1つは一度に100レコードを要求し、もう1つはすべてのレコードを順番にプルする場合があります(速度の違いに注意してください)。一度に1つのレコードをプルするためのデータベースハンドシェイクへの継続的な適用は、オーバーヘッドを大幅に増加させ、スループットの低下をもたらす可能性があります。

于 2011-07-19T12:55:35.797 に答える
0

ブームハウアー: この問題の真相はわかりましたか? 同様の問題が発生しています。Fetchsizes で遊んだことで、わずかなブーストが得られました。私のテスト環境は、製品よりも桁違いに小さく、ODP.net で 1.8 秒、System.Data.OracleClient で 0.2 秒です。fetchsizes を上げて得られる最高の値は 1.6 秒です。

于 2011-10-10T18:05:14.113 に答える
0

Fetch Size を増やしてみてください。これが高いほど、実際にデータを取得するために ODP.net が行う必要がある往復回数が少なくなり、ネットワーク上のパフォーマンスが向上します。(接続プールが有効になっている場合、これは自動的に行われることに注意してください。)

于 2011-07-19T14:08:23.470 に答える