|
|
|
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 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
вот эта нота 978045.1 POOR PERFORMANCE WITH LOB INSERTS весьма интересна :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 19:20 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровДа вообще-то при MOVE (даже без LOB) оно всегда пишется через direct path write (у меня сейчас этот процесс идет) Хотя, предлагают установить именно CACHE, а не CACHE READS Мне кажется, это избыточно -- проблемы, насколько я понял, именно в лишних ненужных чтенияхкак раз недавно в oracle-l писали что Patch 22905136: SECUREFILE LOB HIGH SINGLE BLOCK PHYSICAL READ фиксит эту проблему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 19:29 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
11.2.0.3 Что-то я задумался, а есть ли смысл вообще переходить на SecureFile. Компрессии, шифрования и дедупликации там (скорее всего ) не будет -- нет лицензий на опции Поменялся механизм UNDO / свободного места -- дык там только вставки, удалений/обновлений не планируется С другой стороны, оно растет достаточно шустро и если вдруг встанет такая потребность, миграция будет все длительней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 03:00 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Shtock>>массовую конкурентную вставку лобов. ну если у тебя система делает только это, то я хз. У меня в ней полно селектов и прочего, данные для которых я бы не хотел, чтобы были вытеснены....Делает она у меня дофига чего. Но лобов льется ТЕРАайт-полтора в месяц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 03:58 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
кешинг лобdimyaz Код: plsql 1. Ответ: NO Ну вот. Переключай в YES и наслаждайся. Пока кеширование не включено, сессии, вставляющие лобы, пишут их прямо на диски и будут вешаться на том самом эвэнте, который зрит Вячеслав Любомудров (Direct IO wait`s). Камрад, шобы у тебя давление в старости такое стабильно не высокое было, как стал мой СПУ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 08:25 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
dimyazКамрад, шобы у тебя давление в старости такое стабильно не высокое было, как стал мой СПУ. Шо, таки помогло? Озвучь. Не томи. А то мало ли. Вдруг я таки не угадал твою боль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 10:43 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
кешинг лобdimyazКамрад, шобы у тебя давление в старости такое стабильно не высокое было, как стал мой СПУ. Шо, таки помогло? Озвучь. Не томи. А то мало ли. Вдруг я таки не угадал твою боль? Да, спасибо. Помогло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 10:48 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
dimyaz, Ну вот и славненько. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 10:49 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Мне только хуже сделало -- мало того, что процентов на 20-30 медленней, так еще и ORA-1555 словил на 65% процесса (~18часов) :-) А так да, direct path read/write ушли, появились db file sequential read , а писать стал DBWR Повторюсь еще раз -- выполняется именно MOVE в другое ТП с бОльшим размером блока ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 03:56 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров, а каким местом 1555 к вопросу (не)кеширования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 12:30 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Да вот сам не понимаю Но то, что медленнее -- факт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 15:05 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров, Да и кеш к MOVE-у каким боком - не совсем представляю. Insert Into Select - я бы понял что может идти через кеш, но MOVE... А 1555 у вас потому что 18 часов процесса и LOB проапдейтили поди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 07:05 |
|
||
|
Insert Clob
|
|||
|---|---|---|---|
|
#18+
кешинг лобДа и кеш к MOVE-у каким боком - не совсем представляю. Insert Into Select - я бы понял что может идти через кеш, но MOVE...Но именно так оно и работает, сама табличка через direct path read/write, а LOB-сегмент через db file sequential read и записью занимается DBWR кешинг лобА 1555 у вас потому что 18 часов процесса и LOB проапдейтили поди.LOB там не апгрейдится в принципе, а вставки/удаления на табличке запрещены ибо eXclusive lock при MOVE. Вот не знаю, можно ли при этом обновить LOB через локатор? По идее, нельзя? Да и UNDO на LOB-сегмент работает совсем не через UNDO и, соответственно, и ошибка бы была другой (22924), правда на LOB-индекс таки вылезет 1555 Больше подозреваю, что это на таблички словаря (типа SEG$), там действительно [пере]создавали несколько объектов практически одновременно с началом моего MOVE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 14:13 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1886423]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
173ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 491ms |

| 0 / 0 |
