Der Aufruf Oracle SP mit Tableadapter sehr langsam

stimmen
3

Ich habe eine Abfrage, die super schnell ausgeführt wird, wenn in dem SQL-Editor (Oracle) ausgeführt: 1ms.

Die gleiche Abfrage (wie gespeicherte Prozedur), wenn von einem Datensatz-Tableadapter ausgeführt dauert 2 Sekunden. Ich Abrufen nur 20rows.

Da ich eine Table bin verwenden, werden die Rückgabewerte in einem Ref Cursor gespeichert.

Wenn ich 2'000 Zeilen wurde holen konnte ich verstehen, dass einige Zeit benötigt wird, um den Datensatz zu bauen, aber 2 Sekunden für nur 20 Zeilen scheint zu viel für mich.

Es gibt einen besseren Weg SP auf Orakel auszuführen oder dies der einzige Weg ist? Was könnte ich versuchen, die Leistungen zu verbessern, zu tun?

Danke für Ihre Hilfe!


Suche in Google, scheint es, dass das Problem mit dem refcursor ist. Andere Menschen konfrontiert die gleiche Performance-Problem, aber keine Lösung vorgesehen.

Veröffentlicht am 09/12/2008 um 16:00
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
2

Welche Datenanbieter nutzen Sie?

Haben Sie Referenz System.Data.OracleClient oder haben Sie odp.net (Oracle Data Provider für den Anschluss von NET-Anwendungen mit Oracle) verwenden oder haben Sie devart die (früher bekannt als Corelab) Anbieter verwenden.

Ich habe gute Erfahrungen mit odp.net in Kombination mit Oracle 9. Sie odp.net kostenlos auf der Website von Oracle herunterladen. Siehe: http://www.oracle.com/technology/tech/windows/odpnet/index.html

Sie können die neueste Version (11.1.0.6.20) verwenden, um eine Oracle 9 Datenbank zu verbinden.

Beantwortet am 10/12/2008 um 12:28
quelle vom benutzer

stimmen
0

OK. Ich fand, was das Problem ist.

Am Anfang dachte ich, es ist ein Problem der DataProvided war, aber es war nicht. Ich entdeckte das gleiche Problem in SQL Server 2000 ....

Suche in Google fand ich etwas über den Ausführungsplan aus. Unter diese Weise steigerte ich die Abfrageleistung von 50%.

Kurze Zusammenfassung des Problems ist, dass, wenn ein SP durch die Ausführung von Code, die DBMS einige Probleme mit dem Ausführungsplan hat, und verwendet nicht die Indizes ...

Eine bessere Antwort ist in diesem Beitrag: Parameter Sniffing (oder Spoofing) in SQL Server

Ich hoffe, dies wird dir helfen.

Beantwortet am 12/12/2008 um 11:45
quelle vom benutzer

stimmen
0

Stellen Sie sicher , dass Sie das sind Einstellung CommandTypezu CommandType.StoredProcedure.

Zum Beispiel (von MSDN ):

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;
Beantwortet am 10/12/2008 um 08:42
quelle vom benutzer

stimmen
0

Wie lange dauert es, wenn Sie einen Datareader anstelle einem TableAdaptor verwenden? Ich würde die DataReader- versuchen. Ich habe noch nie Probleme mit dem Datareader begegnet.

Beantwortet am 09/12/2008 um 16:43
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more