powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Insert Clob
25 сообщений из 37, страница 1 из 2
Insert Clob
    #39399341
dimyaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица с 4мя полями типа CLOB.
Есть процесс, где
Сначала происходит insert в таблицу с 1 клобом - в среднем 40к длинной.
Остальные клобята приходят с апдейтами по 100-1000 длинной.

Так вот, как только я увеличиваю кол-во строк на вход в этот процесс, у меня insert с большим CLOB начинает жрать огромные ресурсы по CPU. что потом каскадно отзывается на остальных процесса в бд.

Кто-нибудь встречался с такой проблемой? Вроде у оракла появились secureFiles, с 11-й версии, которые типа имеют много плюсов в работе с LOB, но вот именно плюса насчет скорости вставки я там не увидел.
Есть идеи куда посмотреть?
...
Рейтинг: 0 / 0
Insert Clob
    #39399374
andrey_arj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimyaz,
Может быть мой опыт будет интересен. Пару лет назад мучался с блобами - надо было перенести работу с файлами в базу данных. Хранилище 50 гб, более 1 млн. операций чтения\записи в день, импорт-экспорт между базами, размеры блобов от 1 байта до 100 мб.
В итоге пришел к следующим выводам (решение стабильно работает на SE 11.1\11.2 без проблем вроде):

1. Использовать secureFiles вместо обычных блобов (они появились начиная с версии 11.1). С обычными блобами при высоких нагрузках работать невозможно (в моем случае). Не знаю, какие у вас нагрузки, конечно.

2. Делать online redefenition таблиц с secureFiles пару раз в неделю (с блобами приходилось делать злобный shrink lob до 10 раз в день)

3. Все блобы длиной менее 2000 хранить как строки (VARCHAR2) в приницпе от греха подальше и преобразовывать в блобы в процедурах ввода-вывода.

4. Во избежание ora-01555 при импорте-экспорте между таблицами\схемами блобы копировать пачками по 100-1000 шт.
...
Рейтинг: 0 / 0
Insert Clob
    #39399390
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_arj3. Все блобы длиной менее 2000 хранить как строки (VARCHAR2) в приницпе от греха подальше и преобразовывать в блобы в процедурах ввода-вывода.Почему varchar2, а не raw? 2000, а не 4000?
...
Рейтинг: 0 / 0
Insert Clob
    #39399392
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сначала посмотрел статистику Oracle, чего там сильно много....

Ну и "жрать огромные ресурсы по CPU" больше сильно смахивает на проблемы клиента. Не удивлюсь, если у автора банальная проблема, типа не используются bind-переменные и Clob'ы тут вообще не при чем.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Insert Clob
    #39399409
andrey_arj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKad,

от long raw отказался, потому что вроде как это формат устаревший:
https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1844


А 2000 вместо 4000, потому что не победил зависимость от кодировок при преобразовании блобов в строки и обратно.
Т.е. храню в VARCHAR2 HEX-строку блоба, преобразую блобы в строки RAWTOHEX и обратно HEXTORAW (размер строки соответственно увеличивается в два раза).

Конечно, может быть предложенное решение не самое оптимальное, но оно вполне рабочее.
...
Рейтинг: 0 / 0
Insert Clob
    #39399415
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_arjAmKad,

от long raw отказался, потому что вроде как это формат устаревший:
https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1844


А 2000 вместо 4000, потому что не победил зависимость от кодировок при преобразовании блобов в строки и обратно.
Т.е. храню в VARCHAR2 HEX-строку блоба, преобразую блобы в строки RAWTOHEX и обратно HEXTORAW (размер строки соответственно увеличивается в два раза).

Конечно, может быть предложенное решение не самое оптимальное, но оно вполне рабочее.Overkill.

P.S. raw и long raw - не одно и то же.
...
Рейтинг: 0 / 0
Insert Clob
    #39399422
andrey_arj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKad,

Согласен, может можно и RAW использовать в принципе, у него только максимальная длина все равно 2000. Не помню сейчас причины, почему этот формат мне не понравился.
...
Рейтинг: 0 / 0
Insert Clob
    #39399473
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, Oracle сам умеет динамически выбирать метод хранения BLOB'ов. In row или в отдельном сегменте. Т.ч. пляска с "маленькими блобами" и RAW / VARCHAR2 выглядит, с точки зрения хранения на сервере - достаточно странно.

Раньше (до клиента 11.2), это могло иметь значение для передачи по сети (т.к. BLOB не поддерживали array fetch / bulk collect), но в клиенте 11.2 это уже появилось.

В общем, описанный andrey_arj велосипед, конечно имеет право на жизнь, но только в том случае, если проблема действительно проявляется и этот велосипед ее действительно лечит.

Сам разрабатывал подсистему хранения данных (изображений) в BLOB'ах на Oracle 8i (200 г.). Сотня гигабайт в продакшене - полет был нормальный. Сервера были уровня Celeron'ов 500 Mh, 512 MB ram (дев, продакшен помощьнее). Явных проблем c BLOB не видел.

2. Делать online redefenition таблиц с secureFiles пару раз в неделю (с блобами приходилось делать злобный shrink lob до 10 раз в день)

На мой взгляд, для Oracle это не нормально.

Что на Вашу проблему говорит Oracle Support, какие дает рекомендации ?

Если не обращались и радостно продолжаете делать "online redefenition таблиц с secureFiles пару раз в неделю (с блобами приходилось делать злобный shrink lob до 10 раз в день)" в продакшене с 1 млн. операций чтения\записи в день на табличке 50 гб - то здесь мне даже и сказать нечего. У каждого свои методы получения удовольствия.
...
Рейтинг: 0 / 0
Insert Clob
    #39399558
andrey_arj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Проходил in row, в моем случае этот вариант работал плохо. Не знаю почему. Да, у меня велосипед, но педали крутятся.
Что касается redefenition - а как жить по-другому? Размер secureFiles растет медленно, но верно, производительность падает.
Если на таких объемах чтения\записи занимаемое место за месяц не вырастает в N раз и не падает производительность, то это для меня удивительно по крайней мере. А без secureFiles на обычных блобах задача вообще не решается никак, т.к. место растет ну очень быстро.
Про суппорт долгая история, с ними другой сотрудник общается, оттуда не было советов.
Не утверждаю, что мое решение лучшее, я утверждаю, что оно рабочее и какое-то время на анализ я потратил. Плюс задача несколько нестандартная. Обычно блобы записали и они лежат без изменений (как изображения в вашем случае, скорее всего), у меня же другой случай, идет постоянная перезапись и дозапись.
...
Рейтинг: 0 / 0
Insert Clob
    #39399600
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я наверное буду impolite. Не принимайте на свой счет. Просто у меня настроение такое.

andrey_arjЧто касается redefenition - а как жить по-другому?

Просто жить. Без мазахозма. Это, конечно, не доставляет столько эмоций и впечатлений, но можно и без этого.

Если Вам нравится делать DDL на продакшен базе данных раз в неделю и всем окружающих (заказчика, пользователей) это тоже нравится - то, вряд ли, в этом есть что-то плохое.

andrey_arjРазмер secureFiles растет медленно, но верно, производительность падает.

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

Если же база данных растет до бесконечности.... Ну бывает такое... Но только, обычно, Oracle тут не при чем, кто-то из "коллек" ему помог.

andrey_arjНе утверждаю, что мое решение лучшее, я утверждаю, что оно рабочее и какое-то время на анализ я потратил.

Я поэтому написал, что "велосипед, конечно имеет право на жизнь" т.к. сам сталкивался с ситуациями, когда похожие велосипеды были необходимы.

Я просто говорю, что то, что Вы описываете "нормальным" поведением базы данных назвать сложно. Если Вас все устраивает, то все нормально. Но вот я ТОЧНО уверен, что Oracle может и по другому ))) И BLOB'ы и/или SecureFiles тут явно не при чем.

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

Не путайте СУБД ( БАЗУ ДАННЫХ ) и CD R (без буковки W в конце!). Это немного разные вещи.

Т.ч. Ваша задача, совершенно стандартная. А вот способ ее решения... немного не традиционен.
...
Рейтинг: 0 / 0
Insert Clob
    #39399672
andrey_arj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Тут нужна конкретика, физик верит опыту, как говорится. Мой опыт говорит, что secureFile лучше блобов. При больших объемах записи производительность secureFiles падает значительно (у меня более чем в 2 раза в течение 3.5 дней), а занимаемое место растет (кстати, возможно что и не до бесконечности). Redefenition один из способов решения этого вопроса (вероятно, есть и другие без DDL).

Эти утверждения проверяются довольно легко. Спасибо за критику, за сим разрешите откланяться.
...
Рейтинг: 0 / 0
Insert Clob
    #39399769
кешинг лоб
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimyazЕсть таблица с 4мя полями типа CLOB.
Так вот, как только я увеличиваю кол-во строк на вход в этот процесс, у меня insert с большим CLOB начинает жрать огромные ресурсы по CPU. что потом каскадно отзывается на остальных процесса в бд.
Надеюсь ты, камрад, не забыл перевести лобы в режим кеширования?
А то по умолчанию при создании таблицы режим кеширования для них не задействован, и это кончается очень печально при массовых вставках.
Код: plsql
1.
Select Table_Name, Column_Name, Cache From User_Lobs
...
Рейтинг: 0 / 0
Insert Clob
    #39399918
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то мне казалось, cache у лоба несколько по другое. И как раз при массовых вставках скорее от него вред. засрёшь героически buffer cache.
...
Рейтинг: 0 / 0
Insert Clob
    #39399976
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне тоже так казалось
Но вот такая нота есть: "Insert Into a LOB has poor performance; DIRECTIO READs in Top 5 Wait Events (Doc ID 1291494.1)"
Я как раз сейчас тестирую перенос 200Гб таблички с лобом в другое ТП с преобразованием BasicFile в SecureFile (безо всяких компрессий, шифрований и дедупликаций) -- простой MOVE дает ну просто ужасающую тормознутость (без преобразования шло гораздо веселей, хотя, может дело в том, что это было в выходные)
Замерю время, на следующей неделе повторю, включив кеширование

PS. Дисковая там действительно не очень
...
Рейтинг: 0 / 0
Insert Clob
    #39400176
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровWait Events
Хорошо бы сначала wait events'ы или статистику сессии хоть бегло увидить + версию СУБД

А то гадание при отсутствия хрустального шара.

Напустили страху. Например описание проблемы andrey_arj, кроме как словами "так оно же не работает" ( C ) лично мне не выразит. Но по опыту работы с Oracle > 17 лет и переодической встречи с BLOB'ами, в том числе и очень плотной с ними работами (хранение изображение десятки-сотня(и) GB LOB, картография десятки Gb LOB, миграция базы > 200 Gb BLOB с PostgreSQL) Я уж ни говорю, что BLOB совершенно стандартная вешь и используется почти повсеместно, даже в OeBS.

В общем, мне в такие ужастики верится с трудом.

Конечно всякое может быть: баги, специфика предметной области/задачи (которые по описанию на форуме просто не понятна), настройка сервера - но обычно, это все же диагностируется более точно и лечится не настолько радикальными средствами.

Ну и Oracle СУБД в отличие от продуктов того же M$ допускает настройку хранения данных достаточно в широких приделах.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Insert Clob
    #39400179
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не-не-не, тот бред непривязанный к конкретной ситуации обощенный анализ вообще не обсуждается
...
Рейтинг: 0 / 0
Insert Clob
    #39401444
dimyaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
Select Table_Name, Column_Name, Cache From User_Lobs


Ответ: NO

Leonid Kudryavtsev
Ну и "жрать огромные ресурсы по CPU" больше сильно смахивает на проблемы клиента. Не удивлюсь, если у автора банальная проблема, типа не используются bind-переменные и Clob'ы тут вообще не при чем.


Возможно.
Bind переменные используются. Какие еще могут быть проблемы с клиентом? Процесс запускается с сервака.
...
Рейтинг: 0 / 0
Insert Clob
    #39401615
кешинг лоб
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShtockЧто-то мне казалось, cache у лоба несколько по другое. И как раз при массовых вставках скорее от него вред. засрёшь героически buffer cache.А ты попробуй, камрад.
массовую конкурентную вставку лобов.
Казаться резко перестанет.
...
Рейтинг: 0 / 0
Insert Clob
    #39401622
кешинг лоб
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimyaz
Код: plsql
1.
Select Table_Name, Column_Name, Cache From User_Lobs


Ответ: NO

Ну вот.
Переключай в YES и наслаждайся.
Пока кеширование не включено, сессии, вставляющие лобы, пишут их прямо на диски и будут вешаться на том самом эвэнте, который зрит Вячеслав Любомудров (Direct IO wait`s).
...
Рейтинг: 0 / 0
Insert Clob
    #39401634
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да в общем-то я зрел как direct path read, так и direct path write
Да и ситуация у меня другая -- MOVE
И, честно говоря, непонятно, почему через кеш это должно быть быстрее, ведь это не на клиент гонится, все в том же серверном процессе.
Причем, если с BasicFile --> BasicFile, то достаточно приемлемо, а BasicFile -->SecureFile -- раз в 10 медленней
Возможно, "Bug 8608377 - Copy of Basicfile to Securefile LOB is slow (excess IO) (Doc ID 8608377.8)", хотя он вроде поправлен еще в 11.2.0.1. Там тоже советуется CACHE установить
Ладно, на следующей неделе попробую с cache
...
Рейтинг: 0 / 0
Insert Clob
    #39401646
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровПричем, если с BasicFile --> BasicFile, то достаточно приемлемо, а BasicFile -->SecureFile -- раз в 10 медленнейНаврал.
Посмотрел по протоколам -- в 2.5 раза медленней
В обоих случаях NOCACHE
...
Рейтинг: 0 / 0
Insert Clob
    #39401693
кешинг лоб
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровИ, честно говоря, непонятно, почему через кеш это должно быть быстрее
Потому что "куда писать" у сессии вариантов не много.
А точнее - всего два.
Либо в буфер-кеш, либо сразу на диск (точнее - в сегмент, а как и когда там ось уж будет на диск писать - отдельный интересный вопрос, скорее всего оракл потребует гарантированной записи и direct_IO это подтверждает).
Поэтому при выключенном кешировании лоб пишется прямиком на диск, расталкивая локтями все остальные запросы на запись, и дисковая подсистема встает раком.
А с ней и весь перформанс базы.
...
Рейтинг: 0 / 0
Insert Clob
    #39401704
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вообще-то при MOVE (даже без LOB) оно всегда пишется через direct path write (у меня сейчас этот процесс идет)
Хотя, предлагают установить именно CACHE, а не CACHE READS
Мне кажется, это избыточно -- проблемы, насколько я понял, именно в лишних ненужных чтениях
...
Рейтинг: 0 / 0
Insert Clob
    #39401863
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>массовую конкурентную вставку лобов.

ну если у тебя система делает только это, то я хз. У меня в ней полно селектов и прочего, данные для которых я бы не хотел, чтобы были вытеснены....
...
Рейтинг: 0 / 0
Insert Clob
    #39401868
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот эта нота 978045.1 POOR PERFORMANCE WITH LOB INSERTS весьма интересна :)
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Insert Clob
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]