Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Insert Clob  [new]
dimyaz
Member

Откуда:
Сообщений: 396
Есть таблица с 4мя полями типа CLOB.
Есть процесс, где
Сначала происходит insert в таблицу с 1 клобом - в среднем 40к длинной.
Остальные клобята приходят с апдейтами по 100-1000 длинной.

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

Кто-нибудь встречался с такой проблемой? Вроде у оракла появились secureFiles, с 11-й версии, которые типа имеют много плюсов в работе с LOB, но вот именно плюса насчет скорости вставки я там не увидел.
Есть идеи куда посмотреть?
6 фев 17, 15:24    [20185091]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
andrey_arj
Member

Откуда:
Сообщений: 32
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 шт.
6 фев 17, 15:55    [20185299]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
AmKad
Member

Откуда:
Сообщений: 4454
andrey_arj
3. Все блобы длиной менее 2000 хранить как строки (VARCHAR2) в приницпе от греха подальше и преобразовывать в блобы в процедурах ввода-вывода.
Почему varchar2, а не raw? 2000, а не 4000?
6 фев 17, 16:08    [20185344]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 5888
Я бы сначала посмотрел статистику Oracle, чего там сильно много....

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

IMHO & AFAIK
6 фев 17, 16:08    [20185353]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
andrey_arj
Member

Откуда:
Сообщений: 32
AmKad,

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


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

Конечно, может быть предложенное решение не самое оптимальное, но оно вполне рабочее.
6 фев 17, 16:24    [20185440]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
AmKad
Member

Откуда:
Сообщений: 4454
andrey_arj
AmKad,

от 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 - не одно и то же.
6 фев 17, 16:29    [20185470]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
andrey_arj
Member

Откуда:
Сообщений: 32
AmKad,

Согласен, может можно и RAW использовать в принципе, у него только максимальная длина все равно 2000. Не помню сейчас причины, почему этот формат мне не понравился.
6 фев 17, 16:38    [20185523]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 5888
Вообще-то, 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 гб - то здесь мне даже и сказать нечего. У каждого свои методы получения удовольствия.
6 фев 17, 17:43    [20185861]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
andrey_arj
Member

Откуда:
Сообщений: 32
Leonid Kudryavtsev,

Проходил in row, в моем случае этот вариант работал плохо. Не знаю почему. Да, у меня велосипед, но педали крутятся.
Что касается redefenition - а как жить по-другому? Размер secureFiles растет медленно, но верно, производительность падает.
Если на таких объемах чтения\записи занимаемое место за месяц не вырастает в N раз и не падает производительность, то это для меня удивительно по крайней мере. А без secureFiles на обычных блобах задача вообще не решается никак, т.к. место растет ну очень быстро.
Про суппорт долгая история, с ними другой сотрудник общается, оттуда не было советов.
Не утверждаю, что мое решение лучшее, я утверждаю, что оно рабочее и какое-то время на анализ я потратил. Плюс задача несколько нестандартная. Обычно блобы записали и они лежат без изменений (как изображения в вашем случае, скорее всего), у меня же другой случай, идет постоянная перезапись и дозапись.
6 фев 17, 18:51    [20186095]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 5888
Я наверное буду impolite. Не принимайте на свой счет. Просто у меня настроение такое.

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

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

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

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

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

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

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

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

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

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

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

Т.ч. Ваша задача, совершенно стандартная. А вот способ ее решения... немного не традиционен.
6 фев 17, 19:52    [20186257]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
andrey_arj
Member

Откуда:
Сообщений: 32
Leonid Kudryavtsev,

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

Эти утверждения проверяются довольно легко. Спасибо за критику, за сим разрешите откланяться.
6 фев 17, 21:54    [20186638]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
кешинг лоб
Guest
dimyaz
Есть таблица с 4мя полями типа CLOB.
Так вот, как только я увеличиваю кол-во строк на вход в этот процесс, у меня insert с большим CLOB начинает жрать огромные ресурсы по CPU. что потом каскадно отзывается на остальных процесса в бд.

Надеюсь ты, камрад, не забыл перевести лобы в режим кеширования?
А то по умолчанию при создании таблицы режим кеширования для них не задействован, и это кончается очень печально при массовых вставках.
Select Table_Name, Column_Name, Cache From User_Lobs
7 фев 17, 07:54    [20187169]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
Shtock
Member

Откуда: СПб
Сообщений: 2914
Что-то мне казалось, cache у лоба несколько по другое. И как раз при массовых вставках скорее от него вред. засрёшь героически buffer cache.
7 фев 17, 11:59    [20188133]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17275
Мне тоже так казалось
Но вот такая нота есть: "Insert Into a LOB has poor performance; DIRECTIO READs in Top 5 Wait Events (Doc ID 1291494.1)"
Я как раз сейчас тестирую перенос 200Гб таблички с лобом в другое ТП с преобразованием BasicFile в SecureFile (безо всяких компрессий, шифрований и дедупликаций) -- простой MOVE дает ну просто ужасающую тормознутость (без преобразования шло гораздо веселей, хотя, может дело в том, что это было в выходные)
Замерю время, на следующей неделе повторю, включив кеширование

PS. Дисковая там действительно не очень
7 фев 17, 12:54    [20188407]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 5888
Вячеслав Любомудров
Wait Events

Хорошо бы сначала wait events'ы или статистику сессии хоть бегло увидить + версию СУБД

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

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

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

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

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

IMHO & AFAIK
7 фев 17, 15:01    [20189199]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17275
Не-не-не, тот бред непривязанный к конкретной ситуации обощенный анализ вообще не обсуждается
7 фев 17, 15:04    [20189211]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
dimyaz
Member

Откуда:
Сообщений: 396
Select Table_Name, Column_Name, Cache From User_Lobs

Ответ: NO

Leonid Kudryavtsev

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


Возможно.
Bind переменные используются. Какие еще могут быть проблемы с клиентом? Процесс запускается с сервака.
9 фев 17, 10:45    [20195866]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
кешинг лоб
Guest
Shtock
Что-то мне казалось, cache у лоба несколько по другое. И как раз при массовых вставках скорее от него вред. засрёшь героически buffer cache.
А ты попробуй, камрад.
массовую конкурентную вставку лобов.
Казаться резко перестанет.
9 фев 17, 14:11    [20196817]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
кешинг лоб
Guest
dimyaz
Select Table_Name, Column_Name, Cache From User_Lobs

Ответ: NO

Ну вот.
Переключай в YES и наслаждайся.
Пока кеширование не включено, сессии, вставляющие лобы, пишут их прямо на диски и будут вешаться на том самом эвэнте, который зрит Вячеслав Любомудров (Direct IO wait`s).
9 фев 17, 14:19    [20196843]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17275
Да в общем-то я зрел как 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
9 фев 17, 14:36    [20196909]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17275
Вячеслав Любомудров
Причем, если с BasicFile --> BasicFile, то достаточно приемлемо, а BasicFile -->SecureFile -- раз в 10 медленней
Наврал.
Посмотрел по протоколам -- в 2.5 раза медленней
В обоих случаях NOCACHE
9 фев 17, 14:42    [20196948]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
кешинг лоб
Guest
Вячеслав Любомудров
И, честно говоря, непонятно, почему через кеш это должно быть быстрее

Потому что "куда писать" у сессии вариантов не много.
А точнее - всего два.
Либо в буфер-кеш, либо сразу на диск (точнее - в сегмент, а как и когда там ось уж будет на диск писать - отдельный интересный вопрос, скорее всего оракл потребует гарантированной записи и direct_IO это подтверждает).
Поэтому при выключенном кешировании лоб пишется прямиком на диск, расталкивая локтями все остальные запросы на запись, и дисковая подсистема встает раком.
А с ней и весь перформанс базы.
9 фев 17, 15:30    [20197192]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17275
Да вообще-то при MOVE (даже без LOB) оно всегда пишется через direct path write (у меня сейчас этот процесс идет)
Хотя, предлагают установить именно CACHE, а не CACHE READS
Мне кажется, это избыточно -- проблемы, насколько я понял, именно в лишних ненужных чтениях
9 фев 17, 15:45    [20197259]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
Shtock
Member

Откуда: СПб
Сообщений: 2914
>>массовую конкурентную вставку лобов.

ну если у тебя система делает только это, то я хз. У меня в ней полно селектов и прочего, данные для которых я бы не хотел, чтобы были вытеснены....
9 фев 17, 19:16    [20198179]     Ответить | Цитировать Сообщить модератору
 Re: Insert Clob  [new]
Shtock
Member

Откуда: СПб
Сообщений: 2914
вот эта нота 978045.1 POOR PERFORMANCE WITH LOB INSERTS весьма интересна :)
9 фев 17, 19:20    [20198196]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить