3

SQLエディター(oracle)で実行すると超高速で実行されるクエリがあります:1ミリ秒。

同じクエリ (ストアド プロシージャとして) を DataSet-TableAdapter で実行すると、2 秒かかります。私はちょうど20行を取得しています。

TableAdapter を使用しているため、戻り値は ref カーソルに格納されます。

2'000 行をフェッチしていた場合、DataSet を構築するのに時間がかかることは理解できましたが、20 行だけで 2 秒は私には長すぎるように思えます。

OracleでSPを実行するより良い方法がありますか、それともこれが唯一の方法ですか? パフォーマンスを改善するにはどうすればよいでしょうか?

ご協力いただきありがとうございます!


Googleで検索すると、refcursorに問題があるようです。他の人も同じパフォーマンスの問題に直面しましたが、解決策は提供されていません。

4

4 に答える 4

2

どのデータプロバイダーを使用していますか?

System.Data.OracleClient を参照しますか、それとも odp.net (.NET アプリを Oracle に接続するための Oracle のデータ プロバイダー) を使用しますか、それとも devart の (以前は corelab と呼ばれていた) プロバイダーを使用しますか。

私は odp.net と Oracle 9 を組み合わせて使用​​した経験があります。odp.net はオラクルのサイトから無料でダウンロードできます。参照: http://www.oracle.com/technology/tech/windows/odpnet/index.html

最新バージョン (11.1.0.6.20) を使用して、Oracle 9 データベースに接続できます。

于 2008-12-10T11:28:25.493 に答える
0

Ok。何が問題なのかわかりました。

最初はDataProvidedの問題だと思っていましたが、そうではありませんでした。SQLServer2000でも同じ問題を発見しました。

グーグルで検索して、実行計画について何かを見つけました。このようにして、クエリのパフォーマンスを50%向上させました。

問題の簡単な履歴書は、コードでSPを実行する場合、DBMSが実行プランに問題を抱えており、インデックスを使用しないことです...

より良い答えはこの投稿にあります: SQL Serverのパラメータスニッフィング(またはなりすまし)

これがお役に立てば幸いです。

于 2008-12-12T10:45:27.450 に答える
0

CommandTypeを に設定していることを確認してくださいCommandType.StoredProcedure

例 ( MSDNから):

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;
于 2008-12-10T07:42:37.383 に答える
0

TableAdaptor の代わりに datareader を使用すると、どのくらいの時間がかかりますか? データリーダーを試してみます。データリーダーで問題が発生したことはありません。

于 2008-12-09T15:43:27.663 に答える