Вызов Oracle SP с TableAdapter очень медленный

У меня есть запрос, который выполняется очень быстро при выполнении в редакторе sql (оракул): 1 мс.

Тот же запрос (как хранимая процедура) при выполнении DataSet-TableAdapter занимает 2 секунды. Я просто получаю 20 строк.

Поскольку я использую TableAdapter, возвращаемые значения сохраняются в курсоре ссылки.

Если бы я извлекал 2000 строк, я мог бы понять, что для построения DataSet требуется некоторое время, но 2 секунды только для 20 строк кажутся мне слишком большими.

Есть лучший способ выполнить SP на оракуле или это единственный способ? Что я мог бы попытаться сделать, чтобы улучшить производительность?

Спасибо за вашу помощь!


Поискав в гугле, кажется, что проблема с рефкурсором. Другие люди столкнулись с той же проблемой производительности, но решения не предоставлено.


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....

Поискав в гугле, я нашел кое-что о плане выполнения. Таким образом, я увеличил производительность запросов на 50%.

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

Лучший ответ находится в этом сообщении: Обнюхивание параметров (или спуфинг) в SQL Server< /а>

Я надеюсь, что это поможет вам.

person Davide Vosti    schedule 12.12.2008