Извикването на Oracle SP с TableAdapter е много бавно

Имам заявка, която се изпълнява супер бързо, когато се изпълнява в sql редактора (oracle): 1ms.

Същата заявка (като съхранена процедура), когато се изпълнява от DataSet-TableAdapter, отнема 2 секунди. Просто извличам 20 реда.

Тъй като използвам TableAdapter, върнатите стойности се съхраняват в референтен курсор.

Ако извличах 2000 реда, можех да разбера, че е необходимо известно време за изграждането на DataSet, но 2 секунди само за 20 реда изглеждат твърде много за мен.

Има по-добър начин за изпълнение на SP на oracle или това е единственият начин? Какво мога да опитам да направя, за да подобря представянето?

Благодаря за вашата помощ!


Търсейки в google, изглежда, че проблемът е с refcursor. Други хора са се сблъсквали със същия проблем с производителността, но не е предоставено решение.


person Davide Vosti    schedule 09.12.2008    source източник


Отговори (4)


Кой доставчик на данни използвате?

Позовавате ли се на System.Data.OracleClient или използвате odp.net (доставчик на данни на Oracle за свързване на .NET приложения с Oracle) или използвате доставчик на devart (известен преди като corelab).

Имам добър опит с odp.net в комбинация с Oracle 9. Можете да изтеглите odp.net безплатно от сайта на oracle. Вижте: http://www.oracle.com/technology/tech/windows/odpnet/index.html

Можете да използвате най-новата версия (11.1.0.6.20), за да се свържете с база данни на Oracle 9.

person tuinstoel    schedule 10.12.2008

Колко време отнема, когато използвате четец на данни вместо TableAdaptor? Бих пробвал четеца на данни. Никога не съм срещал проблеми с четеца на данни.

person tuinstoel    schedule 09.12.2008

Уверете се, че настройвате CommandType на CommandType.StoredProcedure.

Например (от MSDN):

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;
person BQ.    schedule 10.12.2008

Добре. Открих какъв е проблема.

В началото мислех, че е проблем на DataProvided, но не беше. Открих същия проблем в SQLServer 2000...

Търсейки в Google, намерих нещо за плана за изпълнение. По този начин повиших ефективността на заявките с 50%.

Кратко резюме на проблема е, че при изпълнение на SP чрез код, СУБД има известни проблеми с плана за изпълнение и не използва индексите...

По-добър отговор е в тази публикация: Снифиране на параметри (или подправяне) в SQL Server

Надявам се това да ви помогне.

person Davide Vosti    schedule 12.12.2008