|
|
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
Добрый день Помогите разобраться. Есть табличка в ней столбец типа CLOB для хранения xml-лек С недавних пор резко стал расти LOB сегмент этой таблички. Размер достиг 20 ГБ а запрос: SELECT SUM (DBMS_LOB.getlength ('SYS_LOB0000219528C00003$$')) / 1024 / 1024 AS "MB" FROM FM_ALINK_RESULTS; выдает что в нем фактически 262 МБ. Делал move таблицы, все пришло в норму, место освободилось. Прошло 2 дня а он уже 7 ГБ а данных в нем 575 МБ Почему так пухнет и как с этим бороться? PS Сильно не пинайте, с Oracle дружу, но пока не очень долго и не так плотно как хотелось бы ибо других задач по работе много ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2017, 13:56 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2017, 14:09 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
Спасибо за ссылку узнал для себя про PCTVERSION. проверяю параметр PCTVERSION для LOB select PCTVERSION from dba_lobs where table_name='FM_ALINK_RESULTS' and owner='POTKOM'; результат null Проверяю RETENTION: select RETENTION from dba_lobs where table_name='FM_ALINK_RESULTS' and owner='POTKOM'; результат 4 параметр PCTVERSION null - значит не задан процент места в лобе под хранение устаревших данных? Тогда почему же все таки так пухнет лоб? Может что-то не правильно понял в доке по ссылке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2017, 15:49 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
Олег73SELECT SUM (DBMS_LOB.getlength ('SYS_LOB0000219528C00003$$')) / 1024 / 1024 AS "MB" FROM FM_ALINK_RESULTS; Лучше иди в школу Сегодня день знаний ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2017, 15:52 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
Не тупи, 1) читай PS в первом сообщении 2) нормально объясни, я же помощи просил а не сарказм и петросянить делаю запрос SELECT l.table_name, L.COLUMN_NAME, s.segment_name, S.TABLESPACE_NAME, l.owner, s.bytes / 1024 / 1024 AS "MB" FROM dba_lobs l, dba_segments s WHERE s.segment_name = l.segment_name AND s.owner = l.owner AND s.segment_type = 'LOBSEGMENT' ORDER BY bytes DESC; выдает мне список lob, беру из поля segment_name имя моего лоб (SYS_LOB0000219528C00003$$) и вставляю в запрос SELECT SUM (DBMS_LOB.getlength ('SYS_LOB0000219528C00003$$')) / 1024 / 1024 AS "MB" FROM FM_ALINK_RESULTS; чем тебе не нравится SYS_LOB0000219528C00003$$ ? и мой запрос на вывод места в лоб? Я могу немного пока тупить тк, опять же, читай PS выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2017, 16:26 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
Олег73, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 'SYS_LOB0000219528C00003$$' строка длиной 25 ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2017, 16:31 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
Stax, воот, понятно где тупил! ок, вот теперь какой запрос по моей таблице: select sum(dbms_lob.getlength(SYS_NC00003$))/1024/1024 from FM_ALINK_RESULTS t выводит что данных в таблице на 264 мб ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2017, 16:57 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
Вообщем так ... Есть сигмент "SYS_LOB0000219528C00003$$" -- Вычисляем размер сегмента Код: plsql 1. 2. 3. result = 7 696 mb -- Находим колонку которая привязана к этому сегменту Код: plsql 1. result = 'SYS_NC00003$' -- смотрим занимаемый размер колонки Код: plsql 1. result = 264,545269012451 mb Почему сегмент весит 7 696 mb, а данные 264 mb ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2017, 17:06 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
BASICFILE или SECUREFILE? SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2017, 17:29 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
Трудно догадаться, что колонка с таким именем скрывает за собой пользовательский/сложный/составной тип? Разбирайся из чего он состоит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2017, 18:35 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
SY, BASICFILE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2017, 19:04 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
Вообще-то вначале общие понятия. Out-of-line LOB пишутся в LOBSEGMENT кусками (chunks). Размер куска задается при создании (смотри select column_name,chunk from user_lobs where table_name = 'твоя-таблица' для твоих CLOB). Предположим 8K. Это значит что, например, при средней длине CLOBa в 2K ты будешь терять в среднем по 6K на CLOB, т.e. размер LOBSEGMENT будет в 4 раза превышать размер данных. Пока переваривай это, потом перейдешь к PCTVERTION/RETENTION. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2017, 19:26 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
Олег73, Постулат: место, ранее занятое удаленным (deleted) LOB-значением, не переиспользуется при вставке/расширении новых/других LOB-значений. (создайте тестовую таблицу с парой длинных текстовых полей и LOB-полем, вставьте в нее пару гигов LOB-значений размером не менее 4к и несколько сот метров в текстовые поля, посмотрите размер сегмента таблицы и LOB-сегмента, удалите вставленные строки, снова посмотрите размеры сегментов, затем еще раз вставьте такой же объем данных как ранее, еще раз посмотрите на размеры сегментов и убедитесь что сегмент самой таблицы не изменил своего размера, а LOB-сегмент вырос в два раза). Учитывая имя вашего LOB-поля, можно предположить что это некое вычисляемое поле, созданное во имя существования функционального индекса. При этом наверняка ваш приклад выполняет апдейт исходного LOB-значения, над которым построен функциональный индекс, а Оракл в ответ на это выполняет удаление вычисляемого для функционального индекса прежнего LOB-значения, и вставку обновленного вычисленного LOB-значения. Ворэраунд - либо пересматривать процесс работы приложения с индексируемым LOB-значением, либо переводить LOB-сегмент в SECUREFILE и периодически по расписанию делать ему SHRINK (возможность сильно зависит от используемой версии СУБД и параметров табличного пространства, в котором живет LOB-сегмент. За подробностями - в документацию по команде ALTER TABLE) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 08:54 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
ЛОБПостулат: место, ранее занятое удаленным (deleted) LOB-значением, не переиспользуется при вставке/расширении новых/других LOB-значений.И тебе RTFM P.S.ЛОБУчитывая имя вашего LOB-поля, можно предположить что это некое вычисляемое поле, созданное во имя существования функционального индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 09:09 |
|
||
|
размер LOB сегмента растет, а данных в нем почти нет
|
|||
|---|---|---|---|
|
#18+
Попробовали отследить объем данных вставляемых в табличку. В результате видим, что идет операция вставки, а далее только множественные операции обновления данных и идет увеличение размера LOB. Т.Е. размер все таки растет из-за хранения предыдущих версий данных. Пошел еще раз читать про PCTVERTION/RETENTION ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 10:54 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39514180&tid=1885319]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
209ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 542ms |

| 0 / 0 |
