Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Ищу пояснения по полям User_Indexes  [new]
FreeLancer
Guest
ORA 9.2 Enterprise Edition
Тех, что описаны в документе A96536-02, недостаточно. Уж слишком там кратко. Если кто поделится ссылочкой, буду очень благодарен.

В частности, очень интересует, что значит поле NUM_ROWS для BITMAP-индексов.
Для NORMAL-индекса это вроде кол-во индексированных ключей.
17 окт 06, 17:43    [3272735]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
FreeLancer
Guest
Откуда вырос вопрос.
Есть реальная БД, в которой имеем:
index_name,         index_type, distinct_keys, num_rows
-------------------------------------------------------
FK_ZAYAVKA_OBJNAMES     NORMAL        987      188262
FK_ZAYAVKA_REGIONS      BITMAP         14          22
Это 2 индекса по 2 разным полям одной таблицы.
Оба поля NOT NULL, статистика собрана одновременно.
Что здесь означает "22", если в таблице 188262 записей?
18 окт 06, 11:08    [3275066]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
M_IV
Member

Откуда:
Сообщений: 1303
USER_INDEXES
18 окт 06, 11:15    [3275149]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
M_IV
Member

Откуда:
Сообщений: 1303
Oracle Indexes
18 окт 06, 11:18    [3275195]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
juks@gala.net
Member

Откуда: Киев
Сообщений: 4212
juks@gala.net читал , с ссылкой на металинк, что имеется такой в Оракле баг.
18 окт 06, 11:56    [3275621]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
M_IV
Member

Откуда:
Сообщений: 1303
FreeLancer
Что здесь означает "22", если в таблице 188262 записей?

14 != 22 похоже на баг. По поводу user_indexes.num_rows:
set linesize 130;
create table test_tab (id number);
insert into test_tab select rownum from dual connect by level < 23;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
create bitmap index ind_test_tab on test_tab(id);
analyze table test_tab compute statistics;
select index_name, index_type, distinct_keys, num_rows from user_indexes where lower(index_name) = 'ind_test_tab';
update test_tab set id = 15 where id > 14;
commit;
select index_name, index_type, distinct_keys, num_rows from user_indexes where lower(index_name) = 'ind_test_tab';
analyze table test_tab compute statistics;
select index_name, index_type, distinct_keys, num_rows from user_indexes where lower(index_name) = 'ind_test_tab';
drop table test_tab;

Table created.
22 rows created.
Commit complete.
22 rows created.
Commit complete.
44 rows created.
Commit complete.
88 rows created.
Commit complete.
176 rows created.
Commit complete.
352 rows created.
Commit complete.
704 rows created.
Commit complete.
1408 rows created.
Commit complete.
2816 rows created.
Commit complete.
5632 rows created.
Commit complete.
Index created.
Table analyzed.

INDEX_NAME                     INDEX_TYPE                  DISTINCT_KEYS   NUM_ROWS
------------------------------ --------------------------- ------------- ----------
IND_TEST_TAB                   BITMAP                                 22         22

1 row selected.
4096 rows updated.
Commit complete.

INDEX_NAME                     INDEX_TYPE                  DISTINCT_KEYS   NUM_ROWS
------------------------------ --------------------------- ------------- ----------
IND_TEST_TAB                   BITMAP                                 22         22

1 row selected.
Table analyzed.

INDEX_NAME                     INDEX_TYPE                  DISTINCT_KEYS   NUM_ROWS
------------------------------ --------------------------- ------------- ----------
IND_TEST_TAB                   BITMAP                                 15         15

1 row selected.
Table dropped.
18 окт 06, 12:18    [3275831]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
FreeLancer
Guest
M_IV
по первой ссылке ничего нового :(
по второй - есть интересные вещи, но не по теме
по поводу эксперимента - на какой версии проводился?
Просто у коллег наблюдалась такая картина:
Я создал сейчас битмап индекс на столбец, в таблице 2 записи. В индексированном столбце 1 запись null, другая not null, выполнил селект из User_Indexes. NUM_ROWS в результате null. Сделал Analyze Index, в результате 2. Добавил еще пару таких же записей и analyze. В результате 4. Т.е. количество записей. Дропнул индекс и создал заново. DISTINCT_KEYS/NUM_ROWS стало 2/2. Добавил еще запись: 2/3. Еще запись 2/4. Опять drop/create: 2/2.


juks@gala.net
Где про это можно почитать? О какой версии идет речь?
18 окт 06, 13:15    [3276320]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
juks@gala.net
Member

Откуда: Киев
Сообщений: 4212
FreeLancer
juks@gala.net
Где про это можно почитать? О какой версии идет речь?

http://www.google.com/search?hs=ylm&hl=ru&client=opera&rls=en&q=bitmap+num_rows&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=
Третья сылка сверху.
https://forums.sdn.sap.com/thread.jspa?messageID=2301863










---------------
Неспешно хочу работаь в Киеве за $1200
18 окт 06, 13:39    [3276480]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
juks@gala.net
Member

Откуда: Киев
Сообщений: 4212
juks@gala.net подозревает что FreeLancer бот )
18 окт 06, 14:27    [3276799]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
FreeLancer
Просто у коллег наблюдалась такая картина:
Я создал сейчас битмап индекс на столбец, в таблице 2 записи. В индексированном столбце 1 запись null, другая not null, выполнил селект из User_Indexes. NUM_ROWS в результате null. Сделал Analyze Index, в результате 2. Добавил еще пару таких же записей и analyze. В результате 4. Т.е. количество записей. Дропнул индекс и создал заново. DISTINCT_KEYS/NUM_ROWS стало 2/2. Добавил еще запись: 2/3. Еще запись 2/4. Опять drop/create: 2/2.



По-моему если примерно представлять как устроен bitmap index и как идет работа с ним, все достаточно логично.

Bitmap индекс в своей основе ( вершине) имеет тот же b-tree индекc, только в листьях вместо плотных пар <ключ>-<rowid> на каждую строку, имеются пары <ключ>-<bitmap по диапазону строк с rowid_start по rowid_stop>.

Корневой блок:
ключ1 ссылка1; ключ2 ссылка2; ...; ключn ссылкаn;

Блок ветвь:
..идентично корневому ...

Листовой блок:
ключ1 маска(для строк с rowid1 по rowid2)
ключ1 маска(для строк с rowid3 по rowid4)
ключ2 маска(для строк с rowid1 по rowid4)
...

Таким образом для одного и того же значения ключа ( например ключ1) может быть несколько битовых масок. NUM_ROWS в индексе, это число пар типа ключ-ссылка в литьевых блоках, а в bitmap индексе соответственно число пар ключ-маска. Т.е. статистика distinct_keys отражает число различных значений индексируемого ключа ( аналогично b-tree-индексу), а статистика NUM_ROWS число entries типа ключ-маска в индексе, которое зависит от размера блока, размера самой таблицы и операций которыми заполнялась таблица.

Собственно эксперимент ваших коллег отражает такую неприятную фичу как "разбухание" bitmap индекса при одиночных изменениях.

Я создал сейчас битмап индекс на столбец, в таблице 2 записи. В индексированном столбце 1 запись null, другая not null, выполнил селект из User_Indexes. NUM_ROWS в результате null. Сделал Analyze Index, в результате 2.

В таблице и индексе 2 записи
Листовой блок индекса выглядит примерно так:
Ключ - <диапазон>маска
<null>         - <rowid1 - rowid2>  10
<not null>    - <rowid1 - rowid2>  01
2 ключа 2 entries


Добавил еще пару таких же записей и analyze. В результате 4. Т.е. количество записей.

Пошел эффект распухания, не всегда при вставке/изменении модифицируется маска, часто добавляется новая, или старая только помечается на удаление пересоздается новая и.т.п. ( алгоритмы меняются (улучшаются:) ) от версии к версии, но тенденция остается ).
В таблице и индексе 4 записи
Листовой блок индекса выглядит примерно так:
Ключ - <диапазон>маска
<null>         - <rowid1 - rowid2>  10
<null>         - <rowid3 - rowid3>  1
<not null>    - <rowid1 - rowid2>  01
<not null>    - <rowid3 - rowid4>  01
2 ключа 4 entries


Дропнул индекс и создал заново. DISTINCT_KEYS/NUM_ROWS стало 2/2.

После пересоздания индекс уплотнился
Листовой блок индекса выглядит примерно так:
Ключ - <диапазон>маска
<null>         - <rowid1 - rowid4>  1010
<not null>    - <rowid1 - rowid4>  0101
2 ключа 2 entries


Добавил еще запись: 2/3.

Листовой блок индекса выглядит примерно так:
Ключ - <диапазон>маска
<null>         - <rowid1 - rowid4>  1010
<not null>    - <rowid1 - rowid4>  0101
<not null>    - <rowid5 - rowid5>  1
2 ключа 3 entries
и.т.д. тенденция думаю понятна?
18 окт 06, 14:34    [3276853]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
juks@gala.net
juks@gala.net подозревает что FreeLancer бот )

Ну вот, столько рисовал и все для бота :(.
18 окт 06, 14:34    [3276862]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
Elic
Member

Откуда:
Сообщений: 29979
Я и ёжик
Ну вот, столько рисовал и все для бота :(.
Говрят, что многократное клонирование некоторых сообщений - это бага в движке форума. Т.е. не исключено, что всё и не так плохо на самом деле.
18 окт 06, 14:43    [3276939]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
FreeLancer
Guest
juks@gala.net
juks@gala.net подозревает что FreeLancer бот )

Я и ёжик
Ну вот, столько рисовал и все для бота :(.

Я не бот. Просто зависла страница "ваше сообщение добавлено, сейчас оно откроется". Нажал кнопку "обновить", получил дубль. Это и есть баг в форуме.

Я и ёжик
Ну вот, столько рисовал

Спасибо, буду знать. Т.о. эмпирически пришли к выводу, что NUM_ROWS для BITMAP-индекса - это количество листьев дерева.
Но даже для свежевыстроенного индекса (таблица не меняется) частенько получается distinct_keys < num_rows, а это уже распуханием не оправдать.
18 окт 06, 15:46    [3277368]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
Elic
Member

Откуда:
Сообщений: 29979
FreeLancer
Просто зависла страница "ваше сообщение добавлено, сейчас оно откроется". Нажал кнопку "обновить", получил дубль. Это и есть баг в форуме.
Нет. Это скорее баг пользователя броузера :)
18 окт 06, 16:00    [3277483]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
FreeLancer
Guest
juks@gala.net

https://forums.sdn.sap.com/thread.jspa?messageID=2301863

Там ссылки на ноты SAP, а где их искать?
Единственное, что понял, что NUM_ROWS не используется (в SAP?) для анализа (чего?).
18 окт 06, 16:11    [3277569]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
FreeLancer
Guest
Elic
FreeLancer
Просто зависла страница "ваше сообщение добавлено, сейчас оно откроется". Нажал кнопку "обновить", получил дубль. Это и есть баг в форуме.
Нет. Это скорее баг пользователя броузера :)

Спорить не буду, но, логически рассуждая о смысле строки "ваше сообщение добавлено, сейчас оно откроется", можно ожидать, что ничего в форум уже писаться не должно, должна повториться попытка открытия ответа.
18 окт 06, 16:14    [3277597]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
FreeLancer
Но даже для свежевыстроенного индекса (таблица не меняется) частенько получается distinct_keys < num_rows, а это уже распуханием не оправдать.

Величина элемента индекса не может превышать половину блока, соответственно для больших таблиц даже свежевыстроенный индекс может содержать больше одной маски на ключь. Если не ошибаюсь, давно смотрел, при создании индекса при 8к блоке в среднем одна маска адресует диапазон около 2000 строк.
18 окт 06, 16:29    [3277732]     Ответить | Цитировать Сообщить модератору
 Re: Ищу пояснения по полям User_Indexes  [new]
M_IV
Member

Откуда:
Сообщений: 1303
set linesize 130;
select * from v$version;
create table test_tab (id number);
insert into test_tab select rownum from dual connect by level < 3;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
insert into test_tab select * from test_tab;
commit;
create bitmap index ind_test_tab on test_tab(id);
analyze table test_tab compute statistics;
select index_name, index_type, distinct_keys, num_rows from user_indexes where lower(index_name) = 'ind_test_tab';
update test_tab set id = 1 where id > 1;
commit;
select index_name, index_type, distinct_keys, num_rows from user_indexes where lower(index_name) = 'ind_test_tab';
analyze table test_tab compute statistics;
select index_name, index_type, distinct_keys, num_rows from user_indexes where lower(index_name) = 'ind_test_tab';
drop table test_tab;


BANNER                                                          
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production                          
CORE	10.2.0.1.0	Production                                      
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production         
NLSRTL Version 10.2.0.1.0 - Production                          

5 rows selected.
Table created.
2 rows created.
Commit complete.
2 rows created.
Commit complete.
4 rows created.
Commit complete.
8 rows created.
Commit complete.
16 rows created.
Commit complete.
32 rows created.
Commit complete.
64 rows created.
Commit complete.
128 rows created.
Commit complete.
256 rows created.
Commit complete.
512 rows created.
Commit complete.
1024 rows created.
Commit complete.
2048 rows created.
Commit complete.
4096 rows created.
Commit complete.
8192 rows created.
Commit complete.
16384 rows created.
Commit complete.
32768 rows created.
Commit complete.
65536 rows created.
Commit complete.
131072 rows created.
Commit complete.
262144 rows created.
Commit complete.
Index created.
Table analyzed.

INDEX_NAME                     INDEX_TYPE                  DISTINCT_KEYS   NUM_ROWS
------------------------------ --------------------------- ------------- ----------
IND_TEST_TAB                   BITMAP                                  2         44

1 row selected.
262144 rows updated.
Commit complete.

INDEX_NAME                     INDEX_TYPE                  DISTINCT_KEYS   NUM_ROWS
------------------------------ --------------------------- ------------- ----------
IND_TEST_TAB                   BITMAP                                  2         44

1 row selected.
Table analyzed.

INDEX_NAME                     INDEX_TYPE                  DISTINCT_KEYS   NUM_ROWS
------------------------------ --------------------------- ------------- ----------
IND_TEST_TAB                   BITMAP                                  1         22

1 row selected.
Table dropped.

>to Я и ёжик
Спасибо за описание 14 != 22
18 окт 06, 16:42    [3277844]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить