1

.net Framework 2.0ベースのアプリケーションでは、System.Data.Oracleclientを使用していて、現在ODP.Netに移行していますが、プロジェクトのボリュームが大きすぎるため、一度に移行全体を実行することはできません。その結果、アプリケーションは次のようになります。現在、2つのプロバイダーSystem.Data.OracleclientとODP.Netを使用しています。

現在、OSをWindowsXP32ビットからWindows764ビットに変更しています。そうしている間、私たちは次のことを観察しました、

1)System.Data.OracleclientおよびODP.Net 10g 64ビット(Oracle.DataAccess.dllバージョン2.102.2.20)を使用して、クエリが1秒未満で実行されます。Oracle SQL Developer v1.5では、同じクエリが1秒未満で実行されます。

2)ただし、ODP.Net 11g 64ビット(Oracle.DataAccess.dllバージョン2.112.3.0)でSystem.Data.OracleClientを使用して実行するには、同じクエリに2〜3分かかります。

ポイント2)で顕著なパフォーマンスの低下が見られました。Windows764ビットOSでODP.Net 11g 64ビット(Oracle.DataAccess.dllバージョン2.112.3.0)でSystem.Data.OracleClientを使用する必要がありますが、パフォーマンスを維持することはできません。ポイント2)で述べたように劣化し、System.Data.OracleClientを使用するすべてのコードをODP.Netに迅速に変換することはできません。

では、ポイント2)で述べたような顕著なパフォーマンスの低下が見られる理由と、この問題を解決するために何をすべきかについて、誰かが私たちを助けてくれるでしょうか。

よろしくSanjibHarchowdhury

4

2 に答える 2

2

構成に以下を追加すると、odp.netトレース情報がログファイルに送信されます。

  <oracle.dataaccess.client>
    <settings>
      <add name="TraceFileName" value="c:\temp\odpnet-tests.trc"/>
      <add name="TraceLevel" value="63"/>
    </settings>
  </oracle.dataaccess.client>

これはおそらく、時間の大きなギャップを見つけることができる場合にのみ役立ちます。たぶん、列が実際に入ってくるのは、ゆっくりとしたペースです。

接続文字列に「enlist=false」を追加してみてください。分散トランザクションを効果的に無効にするため、これを解決策とは見なしませんが、問題を切り分けるのに役立つはずです。オラクルフォーラムの投稿からもう少し情報を得ることができます:

ODPの観点から、実際に指摘できるのは、OCI_ATR_EXTERNAL_NAMEおよびOCI_ATR_INTERNAL_NAMEが基礎となるOCI接続に設定されている場合に動作が発生することです(これは、distrib txサポートが有効になっている場合に発生します)。

odp.net呼び出しとsql開発者呼び出しでは、実行プランが実際には異なる(つまり、実際のパフォーマンスヒットがサーバー上で発生している)ことがわかりません。dbaに接続をトレースさせ、odp.net呼び出しとSQL Developerからの直接呼び出し(またはenlist = falseパラメーターを使用)の両方から実行プランを取得します。

別の実行プランを確認する場合、または暗闇の中でプリエンプティブショットを撮りたい場合は、関連するテーブルの統計を更新してください。私の場合、これにより問題が修正され、実行プランの生成は実際には接続の種類ごとに異なるルールに従わないが、分散トランザクションが含まれる可能性がある場合、コスト分析はわずかに悲観的であることが示されました。実行プランを強制するためのクエリヒントもオプションですが、最後の手段としてのみです。

最後に、ネットワークの問題である可能性があります。odp.netのインストールで新しいOracleホームを使用している場合(インストール後の構成を行わない限り、これを期待します)、tnsnames.oraは異なる可能性があります。ホスト名が完全に修飾されていない可能性があり、サーバーの解決にさらに遅延が発生します。この場合、最初の試行(および後続の試行ではない)が遅くなることだけを期待しているので、それは問題ではないと思いますが、言及する必要があると思いました。

于 2013-02-05T17:09:01.510 に答える
1

このリンクを参照するか、ODP.Net64ビットコンポーネントをODP.Net32ビットに置き換えてください。asp.netを使用しているため、Windows 7(x64)エディションの32ビットコンポーネントを使用して実行するようにアプリケーションを簡単に構成できます。

于 2013-02-08T15:00:03.390 に答える