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

голоса
3

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

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

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

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

Существует лучший способ выполнить SP на оракула или это единственный способ? То, что я мог бы попытаться сделать, чтобы улучшить характеристики?

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


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

Задан 09/12/2008 в 16:00
источник пользователем
На других языках...                            


4 ответов

голоса
2

Какой поставщик данных вы используете?

Есть ли у вас ссылки System.Data.OracleClient или вы используете ODP.NET (поставщика данных Oracle для подключения .NET приложений с Oracle) или вы используете (ранее известный как corelab) поставщика DevArt в.

У меня есть хороший опыт работы с ODP.NET в сочетании с Oracle 9. Вы можете скачать ODP.NET бесплатно на сайте оракула. См: http://www.oracle.com/technology/tech/windows/odpnet/index.html

Вы можете использовать последнюю версию (11.1.0.6.20) для подключения к базе данных Oracle 9.

Ответил 10/12/2008 в 12:28
источник пользователем

голоса
0

ОК. Я обнаружил, что это проблема.

В начале я думал, что это была проблема DataProvided, но она не была. Я обнаружил тот же вопрос в SQLServer 2000 ....

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

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

Лучший ответ на этот пост: Параметр Sniffing (или подмены) в SQL Server

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

Ответил 12/12/2008 в 11:45
источник пользователем

голоса
0

Убедитесь , что вы устанавливаете CommandTypeв CommandType.StoredProcedure.

Например (из MSDN ):

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;
Ответил 10/12/2008 в 08:42
источник пользователем

голоса
0

Сколько времени это займет, когда вы используете DataReader вместо TableAdaptor? Я хотел бы попробовать DataReader. Я никогда не сталкивался с проблемами с DataReader.

Ответил 09/12/2008 в 16:43
источник пользователем

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