Sybase TEXT против производительности Oracle CLOB - PullRequest
5 голосов
/ 19 июля 2011

Мы в процессе преобразования нашей базы данных из Sybase в Oracle и столкнулись с проблемой производительности. В Sybase у нас было поле TEXT и мы заменили его на CLOB в Oracle.

Вот как мы получили доступ к данным в нашем коде Java:

while(rs.next()) {
  String clobValue = rs.getString(1);  // This takes 176ms in Oracle!
  .
  .
}

База данных находится по всей стране, но, тем не менее, у нас не было проблем с производительностью Sybase и его извлечением данных TEXT.

Есть ли что-то, что мы можем сделать, чтобы увеличить эту производительность?

Ответы [ 3 ]

4 голосов
/ 19 июля 2011

По умолчанию большие объекты не извлекаются вместе с данными таблицы, и для извлечения их в getString.

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

3 голосов
/ 19 июля 2011

Некоторые другие параметры:

Сохраняются ли столбцы больших объектов в строке (в строке данных) или вне строки (в отдельном месте)?Если столбцы больших объектов имеют тенденцию быть небольшими (размером менее 4 КБ), вы можете использовать предложение ENABLE STORAGE IN ROW, чтобы указать Oracle хранить данные в строке, где это возможно.

Если ваши большие объекты больше и часто используютсяони хранятся в буферном кеше?По умолчанию в 10g большие объекты имеют значение NOCACHE, что означает, что каждая операция ввода-вывода для них включает прямое чтение в базу данных, событие синхронного диска, которое может быть медленным.Трассировка базы данных выявила бы значительные ожидания при direct path read / direct path write событиях.

Эта глава Руководства разработчика приложений Oracle - большие объекты были бы полезны для чтения.

0 голосов
/ 22 июля 2011

Мы решили использовать другой подход, который позволит нам игнорировать производительность Clob.

Наш текущий код (я его не писал!) Запрашивает таблицу в базе данных и извлекает всю информацию встол, включая сгустки, хотя не было необходимости извлекать их все время.Вместо этого мы создали другое поле с первыми 4k-символами в varchar и запросили это.Затем, когда нам нужен полный сгусток, мы запрашиваем его на индивидуальной основе, а не у всех сгустков для всех записей.

...