|
|
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Есть таблица с 4мя полями типа CLOB. Есть процесс, где Сначала происходит insert в таблицу с 1 клобом - в среднем 40к длинной. Остальные клобята приходят с апдейтами по 100-1000 длинной. Так вот, как только я увеличиваю кол-во строк на вход в этот процесс, у меня insert с большим CLOB начинает жрать огромные ресурсы по CPU. что потом каскадно отзывается на остальных процесса в бд. Кто-нибудь встречался с такой проблемой? Вроде у оракла появились secureFiles, с 11-й версии, которые типа имеют много плюсов в работе с LOB, но вот именно плюса насчет скорости вставки я там не увидел. Есть идеи куда посмотреть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 15:24 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
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 шт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 15:55 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
andrey_arj3. Все блобы длиной менее 2000 хранить как строки (VARCHAR2) в приницпе от греха подальше и преобразовывать в блобы в процедурах ввода-вывода.Почему varchar2, а не raw? 2000, а не 4000? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 16:08 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Я бы сначала посмотрел статистику Oracle, чего там сильно много.... Ну и "жрать огромные ресурсы по CPU" больше сильно смахивает на проблемы клиента. Не удивлюсь, если у автора банальная проблема, типа не используются bind-переменные и Clob'ы тут вообще не при чем. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 16:08 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
AmKad, от long raw отказался, потому что вроде как это формат устаревший: https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1844 А 2000 вместо 4000, потому что не победил зависимость от кодировок при преобразовании блобов в строки и обратно. Т.е. храню в VARCHAR2 HEX-строку блоба, преобразую блобы в строки RAWTOHEX и обратно HEXTORAW (размер строки соответственно увеличивается в два раза). Конечно, может быть предложенное решение не самое оптимальное, но оно вполне рабочее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 16:24 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
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 - не одно и то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 16:29 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
AmKad, Согласен, может можно и RAW использовать в принципе, у него только максимальная длина все равно 2000. Не помню сейчас причины, почему этот формат мне не понравился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 16:38 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Вообще-то, 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 гб - то здесь мне даже и сказать нечего. У каждого свои методы получения удовольствия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 17:43 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Проходил in row, в моем случае этот вариант работал плохо. Не знаю почему. Да, у меня велосипед, но педали крутятся. Что касается redefenition - а как жить по-другому? Размер secureFiles растет медленно, но верно, производительность падает. Если на таких объемах чтения\записи занимаемое место за месяц не вырастает в N раз и не падает производительность, то это для меня удивительно по крайней мере. А без secureFiles на обычных блобах задача вообще не решается никак, т.к. место растет ну очень быстро. Про суппорт долгая история, с ними другой сотрудник общается, оттуда не было советов. Не утверждаю, что мое решение лучшее, я утверждаю, что оно рабочее и какое-то время на анализ я потратил. Плюс задача несколько нестандартная. Обычно блобы записали и они лежат без изменений (как изображения в вашем случае, скорее всего), у меня же другой случай, идет постоянная перезапись и дозапись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 18:51 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Я наверное буду impolite. Не принимайте на свой счет. Просто у меня настроение такое. andrey_arjЧто касается redefenition - а как жить по-другому? Просто жить. Без мазахозма. Это, конечно, не доставляет столько эмоций и впечатлений, но можно и без этого. Если Вам нравится делать DDL на продакшен базе данных раз в неделю и всем окружающих (заказчика, пользователей) это тоже нравится - то, вряд ли, в этом есть что-то плохое. andrey_arjРазмер secureFiles растет медленно, но верно, производительность падает. Если Вы вставляете данные и много - то, разумеется, база данных должна расти в соответствие с объемом данных, которые Вы туда вставили, а производительно __незначительно__ снижаться. Если же база данных растет до бесконечности.... Ну бывает такое... Но только, обычно, Oracle тут не при чем, кто-то из "коллек" ему помог. andrey_arjНе утверждаю, что мое решение лучшее, я утверждаю, что оно рабочее и какое-то время на анализ я потратил. Я поэтому написал, что "велосипед, конечно имеет право на жизнь" т.к. сам сталкивался с ситуациями, когда похожие велосипеды были необходимы. Я просто говорю, что то, что Вы описываете "нормальным" поведением базы данных назвать сложно. Если Вас все устраивает, то все нормально. Но вот я ТОЧНО уверен, что Oracle может и по другому ))) И BLOB'ы и/или SecureFiles тут явно не при чем. andrey_arjПлюс задача несколько нестандартная. Обычно блобы записали и они лежат без изменений (как изображения в вашем случае, скорее всего), у меня же другой случай, идет постоянная перезапись и дозапись. Не путайте СУБД ( БАЗУ ДАННЫХ ) и CD R (без буковки W в конце!). Это немного разные вещи. Т.ч. Ваша задача, совершенно стандартная. А вот способ ее решения... немного не традиционен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 19:52 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Тут нужна конкретика, физик верит опыту, как говорится. Мой опыт говорит, что secureFile лучше блобов. При больших объемах записи производительность secureFiles падает значительно (у меня более чем в 2 раза в течение 3.5 дней), а занимаемое место растет (кстати, возможно что и не до бесконечности). Redefenition один из способов решения этого вопроса (вероятно, есть и другие без DDL). Эти утверждения проверяются довольно легко. Спасибо за критику, за сим разрешите откланяться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 21:54 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
dimyazЕсть таблица с 4мя полями типа CLOB. Так вот, как только я увеличиваю кол-во строк на вход в этот процесс, у меня insert с большим CLOB начинает жрать огромные ресурсы по CPU. что потом каскадно отзывается на остальных процесса в бд. Надеюсь ты, камрад, не забыл перевести лобы в режим кеширования? А то по умолчанию при создании таблицы режим кеширования для них не задействован, и это кончается очень печально при массовых вставках. Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 07:54 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Что-то мне казалось, cache у лоба несколько по другое. И как раз при массовых вставках скорее от него вред. засрёшь героически buffer cache. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 11:59 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Мне тоже так казалось Но вот такая нота есть: "Insert Into a LOB has poor performance; DIRECTIO READs in Top 5 Wait Events (Doc ID 1291494.1)" Я как раз сейчас тестирую перенос 200Гб таблички с лобом в другое ТП с преобразованием BasicFile в SecureFile (безо всяких компрессий, шифрований и дедупликаций) -- простой MOVE дает ну просто ужасающую тормознутость (без преобразования шло гораздо веселей, хотя, может дело в том, что это было в выходные) Замерю время, на следующей неделе повторю, включив кеширование PS. Дисковая там действительно не очень ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 12:54 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровWait Events Хорошо бы сначала wait events'ы или статистику сессии хоть бегло увидить + версию СУБД А то гадание при отсутствия хрустального шара. Напустили страху. Например описание проблемы andrey_arj, кроме как словами "так оно же не работает" ( C ) лично мне не выразит. Но по опыту работы с Oracle > 17 лет и переодической встречи с BLOB'ами, в том числе и очень плотной с ними работами (хранение изображение десятки-сотня(и) GB LOB, картография десятки Gb LOB, миграция базы > 200 Gb BLOB с PostgreSQL) Я уж ни говорю, что BLOB совершенно стандартная вешь и используется почти повсеместно, даже в OeBS. В общем, мне в такие ужастики верится с трудом. Конечно всякое может быть: баги, специфика предметной области/задачи (которые по описанию на форуме просто не понятна), настройка сервера - но обычно, это все же диагностируется более точно и лечится не настолько радикальными средствами. Ну и Oracle СУБД в отличие от продуктов того же M$ допускает настройку хранения данных достаточно в широких приделах. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 15:01 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Не-не-не, тот бред непривязанный к конкретной ситуации обощенный анализ вообще не обсуждается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 15:04 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. Ответ: NO Leonid Kudryavtsev Ну и "жрать огромные ресурсы по CPU" больше сильно смахивает на проблемы клиента. Не удивлюсь, если у автора банальная проблема, типа не используются bind-переменные и Clob'ы тут вообще не при чем. Возможно. Bind переменные используются. Какие еще могут быть проблемы с клиентом? Процесс запускается с сервака. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 10:45 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
ShtockЧто-то мне казалось, cache у лоба несколько по другое. И как раз при массовых вставках скорее от него вред. засрёшь героически buffer cache.А ты попробуй, камрад. массовую конкурентную вставку лобов. Казаться резко перестанет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 14:11 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
dimyaz Код: plsql 1. Ответ: NO Ну вот. Переключай в YES и наслаждайся. Пока кеширование не включено, сессии, вставляющие лобы, пишут их прямо на диски и будут вешаться на том самом эвэнте, который зрит Вячеслав Любомудров (Direct IO wait`s). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 14:19 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Да в общем-то я зрел как 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 14:36 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровПричем, если с BasicFile --> BasicFile, то достаточно приемлемо, а BasicFile -->SecureFile -- раз в 10 медленнейНаврал. Посмотрел по протоколам -- в 2.5 раза медленней В обоих случаях NOCACHE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 14:42 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровИ, честно говоря, непонятно, почему через кеш это должно быть быстрее Потому что "куда писать" у сессии вариантов не много. А точнее - всего два. Либо в буфер-кеш, либо сразу на диск (точнее - в сегмент, а как и когда там ось уж будет на диск писать - отдельный интересный вопрос, скорее всего оракл потребует гарантированной записи и direct_IO это подтверждает). Поэтому при выключенном кешировании лоб пишется прямиком на диск, расталкивая локтями все остальные запросы на запись, и дисковая подсистема встает раком. А с ней и весь перформанс базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 15:30 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Да вообще-то при MOVE (даже без LOB) оно всегда пишется через direct path write (у меня сейчас этот процесс идет) Хотя, предлагают установить именно CACHE, а не CACHE READS Мне кажется, это избыточно -- проблемы, насколько я понял, именно в лишних ненужных чтениях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 15:45 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
>>массовую конкурентную вставку лобов. ну если у тебя система делает только это, то я хз. У меня в ней полно селектов и прочего, данные для которых я бы не хотел, чтобы были вытеснены.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 19:16 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39399415&tid=1886423]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
87ms |
get topic data: |
12ms |
get forum data: |
5ms |
get page messages: |
128ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 519ms |

| 0 / 0 |
