Wywołanie Oracle SP z TableAdapter bardzo powolne

głosy
3

Mam kwerendy, która działa super szybko, gdy wykonywane w edytorze SQL (Oracle): 1ms.

To samo zapytanie (jak procedury przechowywanej) po wykonaniu przez zbioru danych o-TableAdapter trwa 2 sekund. Ja tylko zdobycie 20rows.

Ponieważ używam TableAdapter, zwracane wartości są przechowywane w ref kursora.

Gdybym był pobierania 2'000 wiersze mogę zrozumieć, że od pewnego czasu jest potrzebne do zbudowania zbioru danych, ale tylko 2 sekund do 20 wierszy wydaje się zbyt wiele dla mnie.

Nie ma lepszego sposobu, aby wykonać SP wyroczni czy jest to jedyny sposób? Co mogę spróbować zrobić, aby poprawić występy?

Dzięki za pomoc!


Wyszukiwanie w Google, wydaje się, że problem jest z refcursor. Inne osoby w obliczu tego samego problemu z wydajnością, ale żadne rozwiązanie nie jest przewidziane.

Utwórz 09/12/2008 o 16:00
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
2

Który dostawca danych używacie?

Czy można odwołać System.Data.OracleClient czy użyć ODP.NET (dostawca danych Oracle do łączenia aplikacji .NET z Oracle) lub używasz (dawniej znany jako corelab) Devart jest.

Mam dobre doświadczenia z ODP.NET w połączeniu z Oracle 9. Można pobrać ODP.NET za darmo na stronie Oracle. Zobacz: http://www.oracle.com/technology/tech/windows/odpnet/index.html

Można używać najnowszej wersji (11.1.0.6.20), aby połączyć się z bazą danych Oracle 9.

Odpowiedział 10/12/2008 o 12:28
źródło użytkownik

głosy
0

Ok. Znalazłem to w czym problem.

Na początku myślałem, że to problem z DataProvided, ale to nie było. Odkryłem ten sam problem w SQLServer 2000 ....

Wyszukiwanie w google dowiedziałem się czegoś o plan wykonania. Biorąc w ten sposób, że zapytania zwiększyło wydajność 50%.

Krótki życiorys tego problemu jest to, że podczas wykonywania SP kodem, DBMS ma pewne problemy z planu wykonania, a nie korzystać z indeksów ...

Lepszą odpowiedź jest w tym poście: Parametr Wąchania (lub Fałszowanie) w SQL Server

Mam nadzieję, że to Ci pomoże.

Odpowiedział 12/12/2008 o 11:45
źródło użytkownik

głosy
0

Upewnij się, że ustawienie CommandTypesię CommandType.StoredProcedure.

Na przykład (z MSDN )

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;
Odpowiedział 10/12/2008 o 08:42
źródło użytkownik

głosy
0

Jak długo trzeba czekać, kiedy używasz DataReader zamiast TableAdaptor? Chciałbym spróbować DataReader. Nigdy nie napotkał problemy z datareader.

Odpowiedział 09/12/2008 o 16:43
źródło użytkownik

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