powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / размер LOB сегмента растет, а данных в нем почти нет
15 сообщений из 15, страница 1 из 1
размер LOB сегмента растет, а данных в нем почти нет
    #39514097
Олег73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день
Помогите разобраться.
Есть табличка в ней столбец типа 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 дружу, но пока не очень долго и не так плотно как хотелось бы ибо других задач по работе много
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514105
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514179
Олег73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ссылку
узнал для себя про 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 - значит не задан процент места в лобе под хранение устаревших данных? Тогда почему же все таки так пухнет лоб?
Может что-то не правильно понял в доке по ссылке?
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514180
Не тупи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Олег73SELECT SUM (DBMS_LOB.getlength ('SYS_LOB0000219528C00003$$')) / 1024 / 1024 AS "MB" FROM FM_ALINK_RESULTS;
Лучше иди в школу
Сегодня день знаний
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514198
Олег73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не тупи,
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 выше
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514205
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Олег73,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> SELECT DBMS_LOB.getlength ('SYS_LOB0000219528C00003$$') FROM dual;

DBMS_LOB.GETLENGTH('SYS_LOB0000219528C00003$$')
-----------------------------------------------
                                             25

SQL> ed
Wrote file afiedt.buf

  1* SELECT DBMS_LOB.getlength ('1SYS_LOB0000219528C00003$$') FROM dual
SQL> /

DBMS_LOB.GETLENGTH('1SYS_LOB0000219528C00003$$')
------------------------------------------------
                                              26




'SYS_LOB0000219528C00003$$' строка длиной 25

.....
stax
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514225
Олег73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

воот, понятно где тупил!

ок, вот теперь какой запрос по моей таблице:
select sum(dbms_lob.getlength(SYS_NC00003$))/1024/1024 from FM_ALINK_RESULTS t
выводит что данных в таблице на 264 мб
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514229
v323rs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем так ...

Есть сигмент "SYS_LOB0000219528C00003$$"

-- Вычисляем размер сегмента
Код: plsql
1.
2.
3.
  select sum(bytes)/1024/1024 mbytes
    from dba_extents x
  where x.segment_name = 'SYS_LOB0000219528C00003$$'


result = 7 696 mb

-- Находим колонку которая привязана к этому сегменту
Код: plsql
1.
select column_name from dba_lobs where SEGMENT_NAME='SYS_LOB0000219528C00003$$'



result = 'SYS_NC00003$'

-- смотрим занимаемый размер колонки
Код: plsql
1.
select sum(dbms_lob.getlength(SYS_NC00003$))/1024/1024 from FM_ALINK_RESULTS t



result = 264,545269012451 mb


Почему сегмент весит 7 696 mb, а данные 264 mb
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514243
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BASICFILE или SECUREFILE?

SY.
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514265
Не тупи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Трудно догадаться, что колонка с таким именем скрывает за собой пользовательский/сложный/составной тип?
Разбирайся из чего он состоит
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514732
Олег73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

BASICFILE
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514736
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то вначале общие понятия. 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.
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514840
ЛОБ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Олег73,

Постулат: место, ранее занятое удаленным (deleted) LOB-значением, не переиспользуется при вставке/расширении новых/других LOB-значений. (создайте тестовую таблицу с парой длинных текстовых полей и LOB-полем, вставьте в нее пару гигов LOB-значений размером не менее 4к и несколько сот метров в текстовые поля, посмотрите размер сегмента таблицы и LOB-сегмента, удалите вставленные строки, снова посмотрите размеры сегментов, затем еще раз вставьте такой же объем данных как ранее, еще раз посмотрите на размеры сегментов и убедитесь что сегмент самой таблицы не изменил своего размера, а LOB-сегмент вырос в два раза).
Учитывая имя вашего LOB-поля, можно предположить что это некое вычисляемое поле, созданное во имя существования функционального индекса.
При этом наверняка ваш приклад выполняет апдейт исходного LOB-значения, над которым построен функциональный индекс, а Оракл в ответ на это выполняет удаление вычисляемого для функционального индекса прежнего LOB-значения, и вставку обновленного вычисленного LOB-значения.
Ворэраунд - либо пересматривать процесс работы приложения с индексируемым LOB-значением, либо переводить LOB-сегмент в SECUREFILE и периодически по расписанию делать ему SHRINK (возможность сильно зависит от используемой версии СУБД и параметров табличного пространства, в котором живет LOB-сегмент. За подробностями - в документацию по команде ALTER TABLE)
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514845
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛОБПостулат: место, ранее занятое удаленным (deleted) LOB-значением, не переиспользуется при вставке/расширении новых/других LOB-значений.И тебе RTFM

P.S.ЛОБУчитывая имя вашего LOB-поля, можно предположить что это некое вычисляемое поле, созданное во имя существования функционального индекса.
Олег73CLOB для хранения xml-лек
...
Рейтинг: 0 / 0
размер LOB сегмента растет, а данных в нем почти нет
    #39514910
Олег73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовали отследить объем данных вставляемых в табличку.
В результате видим, что идет операция вставки, а далее только множественные операции обновления данных и идет увеличение размера LOB.
Т.Е. размер все таки растет из-за хранения предыдущих версий данных.
Пошел еще раз читать про PCTVERTION/RETENTION
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / размер LOB сегмента растет, а данных в нем почти нет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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