2012-01-12 4 views
5

Я пытаюсь прочитать столбец clob из oracle в .Net и наблюдать за очень низкой производительностью и большим количеством сетевого трафика.Плохая производительность, получающая поле clob от Oracle в .Net

Я попытался использовать ODP + OCI, devArt + OCI для доступа к данным с одинаковыми результатами - для считывания 1000 строк в считывателе данных занимает около 20 секунд, и для каждой строки читается значение clob.

При проверке проводов звуковых дорожек выясняется, что каждый раз, когда я пытаюсь прочитать поле clob для одной строки в считывателе, есть дополнительные множественные пакеты tcp, отправленные между клиентом и сервером. Таким образом, для 1000 строк это становится в 1000 раз медленнее, чем при запросе только одной строки.

В то же время, если я запускаю тот же запрос в SQL Developer (который, как я полагаю, использует тонкий драйвер jdbc вместо oci), я получаю результаты мгновенно, включая значения clob. Он не пытается запросить clob для каждой строки - он забирает их всех за один раз!

Но я не вижу тонкого клиента для .net. Как я могу ускорить процесс? Пожалуйста помоги!

EDIT: Мой тип поля на самом деле XMLTYPE хранится как clob, а не настоящий clob. Использование getClobVal над ним улучшает результат на 50% до 10 секунд для 1000 строк. Но в то же время Sql Developer возвращает результаты мгновенно, а не через 10 секунд.

+0

Вы когда-нибудь решают эту проблему? Вы зарегистрировали запрос поддержки у поставщика? –

ответ

1

Вы правильно заметили, что Oracle задерживает извлечение больших объектов. Таким образом, производительность вашего приложения ограничена временем кругооборота сети.

С InitialLOBFetchSize свойством OracleCommand класса (в ODP.NET см documentation), вы можете сказать, Oracle, чтобы получить часть большого объекта с начальным поиском строки. Если ваши LOB не слишком длинны, это может иметь значение.

+0

Спасибо, я тоже смотрел на него вчера, но это не имело для меня значения. Я действительно был не очень честен в своем сообщении - у нас есть поле XmlType, которое хранится как clob, а не прямой clob, и, возможно, это вызывает проблемы. Я также попытался вызвать getClobVal над ним, и это дает 50% увеличение производительности, но это всего лишь 10 секунд для 1000 строк, в то время как SQL Developer набирает 5000 практически мгновенно. – neonknight

Смежные вопросы