|
|
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
Создал такое табличное пространство: 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 блока), пока не забивают все свободное пространство. Что это может быть и как с этим бороться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2002, 14:41 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
Сколько у тебя значений неповторяющихся может быть в столбце, на который ты создаёшь BITMAP индекс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2002, 14:44 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
5 неповторяющихся значений. Но дело, по моему, не в этом. В таблицу загружается всего 300к, а каждый индех выростает на 1Г. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2002, 15:09 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
А строк сколько? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2002, 15:16 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
1000 000 строк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2002, 15:33 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
А индекс простой или составной? Я так приблизительно подсчитал, что при одном столбце размер индекса должен быть где-то 85Mb без учёта реального физического размещения на диске. Если 3 индекса, то соответственно где-то 260Mb. Если у тебя в индексе не один столбец скажем, а 3, то видимо и получается 260*3=770Mb. Вполне реально. А с учётом того, что данные по блокам размещаютя, вщависимости от степени заполнения блока, то и получается 1G. Мне кажется вполне реально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2002, 16:09 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
2Tiger как я понимаю на текущий момент, это нужно рассматривать как фичу bitmap-индексов. Думал, что в 9ке что-то изменилось в этом плане в лучшую сторону, но видимо ничего не изменилось. Могу лишь посоветовать делать загрузку данных в партицированную таблицу через exchange table, либо поиграть параметрами, влияющими на размер памяти при работе с bitmap-индексами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2002, 16:30 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
Индекы простые. Один из них сейчас( при 1000 000 записей 2-х неповторяющихся значениях) зинимает всего 40 блоков по 8к в блоке=300к. Так каким образом при загрузке еще 300 записей он выростает до 1Г.????? Почему в табличном пространстве при загрузке выделяется ему куча экстентов по 1024 блока в каждом??? Хотя одного такого экстента хватилобы еще на десяток миллионов гаписей! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2002, 16:34 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
Pozaluista na gora: -- tip tablespace LMT/DMT -- esli LMT to UNIFORM SIZE ili ustanovky AUTOALLOCATE -- esli DMT storage parameters --> dlia index i dlia tablespase ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2002, 18:44 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
2 ShgGena вопрос остается только следующий: почему при массовой заливке данных, bitmap-индекс растет неадекватно размеру вставляемых данных (гигабайты), а после rebuild'a все встает на свои места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2002, 22:06 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
попробовал поставить UNIFORM SIZE 1М ситуация оталась прежней, только теперь куча экстентов по 1М. %( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2002, 16:38 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
Я попрововал смоделировать ситуацию с 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 и это приведет к огромному количеству мало заполненных блоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2002, 19:12 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
Да кстати есть одна полусумашедшая мысль: проборал ли ты увеличить количество FREELISTS поскольку если FREELISTS = 1 и загрузка идет из одной сессии то он УЖЕ занят и Oracle ОБЯЗАН использовать HWM в случае заполнения блока до 100-FREE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2002, 19:22 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
Спасибо ВСЕМ кто участвовал в обсуждении данной темы. Применив метод научного тыка (+ шаманский бубен) я нашел решение данной проблемы. При создании табличного пространства необходимо указать: SEGMRNT SPACE MANAGMENT MENUAL и тогда все становится на свои места! Вариант который предложил ShgGena (касаемо FREELISTS) я не пробовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2002, 15:16 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
Не долго музыка играла... >>Применив метод научного тыка (+ шаманский бубен) я нашел решение >>данной проблемы. >>При создании табличного пространства необходимо указать: SEGMRNT >>SPACE MANAGMENT MENUAL и тогда все становится на свои места! К сожалению SEGMENT SPACE MANAGMENT MANUAL не решает ПРОБЛЕМЫ (т.е. в некоторых случаях это помогает) при интенсивной загрузке проблем осталась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2002, 16:15 |
|
||
|
Помогите! Ora92 проблем с BITMAP индексами!!!!
|
|||
|---|---|---|---|
|
#18+
У меня были те же проблемы: после массовой вставки записей одиночными Insert, скажем 2% от полного количества записей в таблице, объем занимаемый bitmap индексом увеличивался раза в два. После нескольких таких операций - катастрофический просто результат, когда объем занимаемый индексом увеличивался в сотни раз и даже пытался превысить объем занимаемый самой таблицей. После чтения документации Oracle о DWH, пакетной загрузке данных пришло просветление: 1) Использовать SqlLoader (мне не подошло) 2) Загружать в отд. таблицу и делать Exchange partitions (но у меня Partition был слишком крупный, тоже не подошло) 3) Загружать данные во временную таблицу (global temporary table), затем делать insert into ... select * from временная_таблица ; Так теперь и делаю. Индексы конечно растут, но не сильно быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2003, 18:24 |
|
||
|
|

start [/forum/topic.php?fid=52&tid=1992115]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
149ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 456ms |

| 0 / 0 |
