- - PR -
DataAdapterのレスポンスについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-09-25 16:29
いつも参考にさせていてだいております。
以前にも話題になっているようですが、 Oracleを使用する際のデータプロバイダを検討しているところです。 「DB接続ドライバは、DBメーカーに合わせたほうが良い」的な考えにより、 ODPを使用して開発を進めておりましたが、 DataAdapterの使用時に問題が発生しました。 DataAdapterにて2000件弱のレコードを取得しようとした場合、 DataAdapterのFillが返ってくるまでに ODPでは 1分10秒 OracleClientでは 1秒 と、レスポンスに大きな違いが出てしまいました。 なお、同じSELECT文をDataReaderで取得し、データテーブルに設定した場合には ODPでも1秒かからずに処理が終了します。 ODPでDataAdapterを使用する場合にのみ、 異常に処理時間がかかるように思われます。 これを使用しないで開発を進めることは可能ですが、 なぜこのような現象になるのか、根拠がわからず、 コーディングも短いため、コーディングに問題があるとも考えられず、 なんだかすっきりしない状態でおります。 どなたか、同様の現象を確認したことがある方、あるいは この現象の根拠が推測できる方がおられましたら、 書込みをお願いいたします。 なお、実際のコーディングは以下の通りです。 Imports Oracle.DataAccess.Client Imports System.Data.OracleClient ※Imports宣言を切り替えて動作を確認しています。 Dim SQL As New System.Text.StringBuilder SQL.Append("SELECT * FROM MSHOHIN ") SQL.Append(" WHERE ") SQL.Append(" TENPOCD = '00'") Dim DT As New DataTable Dim oda As New OracleDataAdapter(SQL.ToString, connectionstring) oda.Fill(DT) 以上です。 よろしくお願いいたします。 | ||||
|
投稿日時: 2006-09-25 16:57
訂正です。
書き方が悪かったような気がしています。 どのようなことでも結構ですので、 自由なご意見をお願いいたします。 | ||||
|
投稿日時: 2006-09-25 17:46
DataAdapterって結局ただの中継役なので、
結局中でCommandとDataReader使ってると思うんですけどね… (実装見てないので確証ありませんが) 書いてあるコードの範囲では特に問題は見当たらないと思います。 調べるとしたら、 接続先データベースのバージョン、ODP.NETのバージョン クライアントにインストールしているOracle Clientのバージョン .NET Frameworkのバージョン、環境変数(ORACLE_HOME)とか その他諸々…ってとこでしょうか。 | ||||
|
投稿日時: 2006-09-25 17:53
ODPで実行したのが初めて、OracleClientで実行したのが2回目、
DataReaderで実行したのが3回目以降だとしたら、 2回目以降はDBキャッシュにヒットしたから速くなったとか。 #かなりうがった見方ですけどね それぞれでの実測定回数が文面からはわからないので。。 | ||||
|
投稿日時: 2006-09-25 18:34
返信ありがとうございます。
@接続先データベースのバージョン ・9.2.0.1.0 Oracle9i Release 9.2.0.1.0 - Production ・10.1.0.5.0 Oracle Database 10g Release 10.1.0.5.0 - Production ふたつのデータベースで検証を行い、 どちらも同じ結果でした AODP.netのバージョン Oracle.DataAccess.dllのファイルバージョンは「10.1.0.400」です BOracle Clientのバージョン 10g Release 1 (10.1.0.2.0) for Windows(だと思います) C.NET Frameworkのバージョン バージョン1.1.4322 SP1 ※Visual Studio は2003です A、B、Cに関しては、 適正なバージョンの組み合わせ、あるいは バージョンの組み合わせによる不具合などがあるかもしれない、 ということでしょうか? それはどのようにして 調べることが出来るでしょうか? 教えていただけるとありがたいと思います。 よろしくお願いいたします。 | ||||
|
投稿日時: 2006-09-25 18:36
返信ありがとうございます。
ODPでの実行、OracleClientでの実行を 何度も交互に繰り返していますので、 DBキャッシュの問題ではないと思われます・・ ご意見、ありがとうございました。 | ||||
|
投稿日時: 2006-09-26 15:32
自己レスです。
取得項目のデータに、NULL値が多く含まれている場合のみ 異常に時間がかかることが分かりました。 (ODPの不具合なんでしょうかね?) とりあえず今回は、 原因となった項目は取得する必要がなかったため、 この項目を取得しないことで解決することにしました。 返信いただいたみなさま、ありがとうございました。 |
1