powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите! Ora92 проблем с BITMAP индексами!!!!
16 сообщений из 16, страница 1 из 1
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32072990
Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создал такое табличное пространство:
CREATE TABLESPACE "D"
LOGGING
DATAFILE 'D:\ORACLE\ORADATA\KLS\D1.ora' SIZE 4968M REUSE
AUTOEXTEND
ON NEXT 1024K MAXSIZE 32767M EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO.
Создал в нем таблицу T1 с тремя BITMAP индексами.
При загрузке в T1 данных (около 300к) начинают очень быстро расти индексы (экстентами по 1024 блока), пока не забивают все свободное пространство.
Что это может быть и как с этим бороться?
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32072992
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сколько у тебя значений неповторяющихся может быть в столбце, на который ты создаёшь BITMAP индекс?
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32073013
Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
5 неповторяющихся значений. Но дело, по моему, не в этом. В таблицу загружается всего 300к, а каждый индех выростает на 1Г.
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32073017
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А строк сколько?
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32073030
Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1000 000 строк
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32073051
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А индекс простой или составной? Я так приблизительно подсчитал, что при одном столбце размер индекса должен быть где-то 85Mb без учёта реального физического размещения на диске. Если 3 индекса, то соответственно где-то 260Mb. Если у тебя в индексе не один столбец скажем, а 3, то видимо и получается 260*3=770Mb.
Вполне реально. А с учётом того, что данные по блокам размещаютя, вщависимости от степени заполнения блока, то и получается 1G. Мне кажется вполне реально.
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32073072
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Tiger

как я понимаю на текущий момент, это нужно рассматривать как фичу bitmap-индексов. Думал, что в 9ке что-то изменилось в этом плане в лучшую сторону, но видимо ничего не изменилось. Могу лишь посоветовать делать загрузку данных в партицированную таблицу через exchange table, либо поиграть параметрами, влияющими на размер памяти при работе с bitmap-индексами.
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32073075
Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Индекы простые. Один из них сейчас( при 1000 000 записей 2-х неповторяющихся значениях) зинимает всего 40 блоков по 8к в блоке=300к. Так каким образом при загрузке еще 300 записей он выростает до 1Г.?????
Почему в табличном пространстве при загрузке выделяется ему куча экстентов по 1024 блока в каждом??? Хотя одного такого экстента хватилобы еще на десяток миллионов гаписей!
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32073143
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pozaluista na gora:

-- tip tablespace LMT/DMT
-- esli LMT to UNIFORM SIZE ili ustanovky AUTOALLOCATE
-- esli DMT storage parameters -->
dlia index i dlia tablespase
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32073177
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ShgGena

вопрос остается только следующий: почему при массовой заливке данных, bitmap-индекс растет неадекватно размеру вставляемых данных (гигабайты), а после rebuild'a все встает на свои места.
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32073529
Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробовал поставить UNIFORM SIZE 1М ситуация оталась прежней, только теперь куча экстентов по 1М. %(
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32073671
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я попрововал смоделировать ситуацию с bitmat индексами при массовой загрузке. Ниже результаты:

drop table ord_table;
create table ord_table (a varchar2(100), n number);
create bitmap index ord_b_index on ord_table(a);

insert into ord_table
select * from (
select object_type, object_id
from all_objects
union all
select object_type, object_id
..............
select object_type, object_id
from all_objects
union all
select object_type, object_id
from all_objects
)
order by 1
;

36612 rows created.

drop table ord_table;
create table ord_table (a varchar2(100), n number);
create bitmap index ord_b_index on ord_table(a);

insert into ord_table
select * from (
select object_type, object_id
from all_objects
union all
select object_type, object_id
from all_objects
....
union all
select object_type, object_id
from all_objects
)
order by dbms_random.value
;
36612 rows created.

Созданы две одинаковые таблицы с одинаковыми записями и одинаковыми индексами.
Отличаются только в ORDER BY .. - в одном случае загрузка упорядоченная по индексу в другом случайная.

Далее:

analyze table ord_table compute statistics;
analyze table not_ord_table compute statistics;

select
LEAF_BLOCKS, DISTINCT_KEYS, AVG_DATA_BLOCKS_PER_KEY, AVG_LEAF_BLOCKS_PER_KEY,
CLUSTERING_FACTOR, NUM_ROWS
from all_indexes where owner = 'TRAIN' and table_name = 'ORD_TABLE'
and index_name = 'ORD_B_INDEX';

LEAF_BLOCKS DISTINCT_KEYS AVG_DATA_BLOCKS_PER_KEY AVG_LEAF_BLOCKS_PER_KEY CLUSTERING_FACTOR
----------- ------------- ----------------------- ----------------------- -----------------
NUM_ROWS
----------
2 14 1 1 14
14

select BLOCK_ID, BLOCKS from dba_extents
where
owner = 'TRAIN' and segment_name = 'ORD_B_INDEX';

SQL>
BLOCK_ID BLOCKS
---------- ----------
6506 8

select
LEAF_BLOCKS, DISTINCT_KEYS, AVG_DATA_BLOCKS_PER_KEY, AVG_LEAF_BLOCKS_PER_KEY,
CLUSTERING_FACTOR, NUM_ROWS
from all_indexes where owner = 'TRAIN' and table_name = 'NOT_ORD_TABLE'
and index_name = 'NOT_ORD_B_INDEX';

SQL>
LEAF_BLOCKS DISTINCT_KEYS AVG_DATA_BLOCKS_PER_KEY AVG_LEAF_BLOCKS_PER_KEY CLUSTERING_FACTOR
----------- ------------- ----------------------- ----------------------- -----------------
NUM_ROWS
----------
9 14 1 1 23
23

select BLOCK_ID, BLOCKS from dba_extents
where
owner = 'TRAIN' and segment_name = 'NOT_ORD_B_INDEX';
SQL>
BLOCK_ID BLOCKS
---------- ----------
6514 8
6530 8

Посмотрим во внутрь физических блоков для этих индексов:
(полностью дамп не приводится ввиду его объема)

alter system dump datafile 13 block min 6506 block max 6507;
alter system dump datafile 13 block min 6514 block max 6515;

Для ORDER индекса ---
....
row#0[3953] dba: 54532461=0x340196d
col 0; len 1; (1): 54
col 1; TERM
----- end of branch block dump -----

Для NOT_ORDER индекса ---
....

kdxbrbksz 3960
row#0[3944] dba: 54532469=0x3401975
col 0; len 5; (5): 49 4e 44 45 58
col 1; len 4; (4): 03 40 17 a0
col 2; TERM
row#1[3937] dba: 54532470=0x3401976
col 0; len 1; (1): 50
col 1; TERM
row#2[3929] dba: 54532471=0x3401977
col 0; len 2; (2): 50 52
col 1; TERM
row#3[3911] dba: 54532472=0x3401978
col 0; len 7; (7): 53 59 4e 4f 4e 59 4d
col 1; len 4; (4): 03 40 17 94
col 2; TERM
row#4[3904] dba: 54532473=0x3401979
col 0; len 1; (1): 54
col 1; TERM
row#5[3889] dba: 54532482=0x3401982
col 0; len 5; (5): 54 41 42 4c 45
col 1; len 3; (3): 03 40 18
col 2; TERM
row#6[3881] dba: 54532483=0x3401983
col 0; len 2; (2): 54 59
col 1; TERM
row#7[3866] dba: 54532484=0x3401984
col 0; len 4; (4): 56 49 45 57
col 1; len 4; (4): 03 40 17 93
col 2; TERM
----- end of branch block dump -----

Выводы:
при массовой загрузке в случае неупорядоченного потока значений индекса (ЕСЛИ ЭТОТ ИНДЕКС СОЗДАН ДО ЗАГРУЗКИ)
oracle заполняет физические блоки индексов КАК ЕСТЬ В ПОРЯДКЕ ПОСТУПЛЕНИЯ ЗАПИСЕЙ
(по другому не может !!!)
в результате --
а) возникают длинные цепочки блоков с одним начальным блоком и и множеством блоков в цепочке.
б) вполне возможно что плотность заполнения блока в такой ситуации значительно ниже
( для 36000 записей была в два раза ниже)

далее можно развить и проанализировать как связаны цепочки
в разных блоках и помечает ли Oracle незаконченные цепочки как "удаленные" но в лом.

Совершенно ясно одно !!!
в случае полного заполнения физического блока новая запись для значения индесного клуча будет
записана ВЫШЕ HWM и это приведет к огромному количеству мало заполненных блоков.
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32073676
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да кстати есть одна полусумашедшая мысль:
проборал ли ты увеличить количество FREELISTS поскольку
если FREELISTS = 1 и загрузка идет из одной сессии то
он УЖЕ занят и Oracle ОБЯЗАН использовать HWM в случае заполнения блока до 100-FREE.
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32074108
Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо ВСЕМ кто участвовал в обсуждении данной темы.

Применив метод научного тыка (+ шаманский бубен) я нашел решение данной проблемы.
При создании табличного пространства необходимо указать: SEGMRNT SPACE MANAGMENT MENUAL и тогда все становится на свои места!

Вариант который предложил ShgGena (касаемо FREELISTS) я не пробовал.
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32078876
Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не долго музыка играла...

>>Применив метод научного тыка (+ шаманский бубен) я нашел решение >>данной проблемы.
>>При создании табличного пространства необходимо указать: SEGMRNT >>SPACE MANAGMENT MENUAL и тогда все становится на свои места!

К сожалению SEGMENT SPACE MANAGMENT MANUAL не решает ПРОБЛЕМЫ (т.е. в некоторых случаях это помогает) при интенсивной загрузке проблем осталась.
...
Рейтинг: 0 / 0
Помогите! Ora92 проблем с BITMAP индексами!!!!
    #32093614
Smax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня были те же проблемы: после массовой вставки записей одиночными Insert, скажем 2% от полного количества записей в таблице, объем занимаемый bitmap индексом увеличивался раза в два. После нескольких таких операций - катастрофический просто результат, когда объем занимаемый индексом увеличивался в сотни раз и даже пытался превысить объем занимаемый самой таблицей.
После чтения документации Oracle о DWH, пакетной загрузке данных пришло просветление:
1) Использовать SqlLoader (мне не подошло)
2) Загружать в отд. таблицу и делать Exchange partitions (но у меня Partition был слишком крупный, тоже не подошло)
3) Загружать данные во временную таблицу (global temporary table), затем делать insert into ... select * from временная_таблица ;
Так теперь и делаю. Индексы конечно растут, но не сильно быстро.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите! Ora92 проблем с BITMAP индексами!!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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