2012-01-12 13 views
5

.Netでoracleからclob列を読み取り、パフォーマンスが非常に悪く、ネットワークトラフィックが多いことを確認しようとしています。.NetでのOracleのclobフィールドのパフォーマンスが低下しています

私は同じ結果でデータにアクセスするためのdevArt + OCIの方法を試しました。データ・リーダーで1000行を取得し、各行のclob値を読み取るのに20秒ほどかかります。

wiresharkのトレースを調べると、リーダーの1つの行のclobフィールドを読み取ろうとするたびに、クライアントとサーバーの間に追加の複数のtcpパケットが送信されることがわかります。したがって、1000行の場合、これは1行だけを照会する場合よりも1000倍遅くなります。

同時に、SQL Developer(私はociの代わりにthin jdbcドライバを使用すると信じています)で同じクエリを実行すると、結果が即座に取得されます。それは各行のためにclobを照会しようとしない - それはそれらをすべて1つに行く!

しかし、私は.netのシンクライアントを見ません。どのように物事をスピードアップできますか?助けてください!

EDIT:私のフィールドタイプは実際にはCLOBとして保存されたXMLTYPEであり、真のクローブではありません。 getClobValを使用すると、1000行で50%〜10秒の結果が向上します。しかし、同時に、Sql Developerは10秒以内ではなく即座に結果を返します。

+0

この問題を解決しましたか?ベンダーにサポートリクエストを記録しましたか? –

答えて

1

OracleはLOBの取得を遅らせることを正しく観察しました。したがって、アプリケーションのパフォーマンスはネットワークの往復時間によって制限されます。 OracleCommandクラスのInitialLOBFetchSizeプロパティで

(ODP.NETで、documentationを参照してください)、あなたは、行の最初の検索でLOBの一部を取得するためにOracleを伝えることができます。 LOBの長さが長すぎない場合、これはかなりの違いをもたらす可能性があります。

+0

ありがとう、私もそれを昨日見ていたが、それは私に違いをもたらさなかった。実際に私のメッセージでは正直ではありませんでした.XmlTypeフィールドがclobとして保存されています。直接clobではなく、おそらくこれが問題の原因です。私もgetClobValを呼び出してみましたが、パフォーマンスは50%向上しましたが、SQL Developerがほぼ即座に5000をフェッチする間に1000行ではわずか10秒です。 – neonknight

関連する問題