Настройка
У меня есть таблица оракула с парой атрибутов и типом данных CLOB. Приведенную ниже таблицу я создал двумя способами, каждый из которых должен вести себя одинаково.
CREATE TABLE DEMO(
a number (10, 2),
data CLOB
)
CREATE TABLE DEMO(
a number (10, 2),
data CLOB
) LOB (data) Stored AS (STORAGE IN ROW ENABLED)
Сценарий
Согласно документации оракула, когда CLOB больше 4000 байтов, он будет сохранен в виде встроенного контура.
Когда я сохраняю данные в этой таблице для значения clob, скажите «Hello», а затем я вижу информацию о сегменте для «Demo table» и «Demo table LOB segment», это показывает, что все данные собираются в таблицу и нет новых блоки потребляются в сегменте Lob.
Когда я храню большие данные с общим символом менее 1500, я также получаю то же поведение, что и выше.
Но когда я сохраняю данные с общим символом> 2000 и ‹3000, тогда данные большого объекта направляются в сегмент большого объекта, даже если общее количество символов меньше 3000.
Вопрос
- Почему в LOB-сегмент поступают данные размером менее 3000 символов? . Это то, что каждый символ занимает 2 байта, что оправдывает, что данные до 1500 идут в данные, а не в сегмент журнала.
Проблема
Много места на диске тратится впустую из-за таблицы LOB, поскольку размер CHUNK составляет 8 КБ, а данные в блоке всегда будут иметь размер от 3 до 4 КБ, а в некоторых случаях и больше. Столь существенное для каждой строки пространство 4 КБ тратится впустую, а в случае 20 млн строк он работает в 50 ГБ