Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Секционированный индекс / 14 сообщений из 14, страница 1 из 1
26.07.2019, 13:12
    #39841867
Migelle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
Доброго дня всем.

Есть глобальный секционированный индекс. Примерно такой:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE INDEX IDX_DOC
ON DOCS(DOC_TYPE, DOC_NUMBER,DOC_DATE, STATE ...)
GLOBAL PARTITION BY HASH (DOC_TYPE)
( PARTITION P1 TABLESPACE USERS,
  PARTITION P2 TABLESPACE USERS,
  PARTITION P3 TABLESPACE USERS,
  PARTITION P4 TABLESPACE USERS
)
PARALLEL LOGGING;


В таблице вариантов значения поля DOC_TYPE всего 4 штуки.
Причем одного значения ~50% записей
Второго ~ 30%
Остальное делится между оставшимися двумя

Возможно ли как-то увидеть как распределились записи по партициям индекса?
...
Рейтинг: 0 / 0
26.07.2019, 13:30
    #39841877
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
Да так и распределились -- если всего 4 возможных значения, то и всего 4 хэш-значения
И радуйся, если они легли в разные секции, а то в самое большое еще и соседнее приляжет.

Если оно всегда будет известное кол-во значений, то, наверное, лучше использовать LIST+HASH
...
Рейтинг: 0 / 0
26.07.2019, 13:34
    #39841881
Migelle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
Вячеслав ЛюбомудровИ радуйся, если они легли в разные секции
Так мне, собственно, и хотелось бы удостовериться, что они именно так разлеглись.
лучше использовать LIST+HASH
А можно поподробнее, о чем речь?
...
Рейтинг: 0 / 0
26.07.2019, 13:51
    #39841890
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
Migelle Возможно ли как-то увидеть как распределились записи по партициям индекса?Написать запрос с предикатом и посмотреть в плане, из какой секции идет выборка.
...
Рейтинг: 0 / 0
26.07.2019, 13:53
    #39841891
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
Migelleлучше использовать LIST+HASHА можно поподробнее, о чем речь?Cейчас уже есть by list automatic
...
Рейтинг: 0 / 0
26.07.2019, 13:58
    #39841896
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
MigelleВячеслав ЛюбомудровИ радуйся, если они легли в разные секции
Так мне, собственно, и хотелось бы удостовериться, что они именно так разлеглись.
select doc_type, count(*) from docs partition(p1);
Migelleлучше использовать LIST+HASH
А можно поподробнее, о чем речь?Составное секционирование: partition by list subpartition by hash
...
Рейтинг: 0 / 0
26.07.2019, 13:59
    #39841898
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
Migelle Возможно ли как-то увидеть как распределились записи по партициям индекса?
sys_op_lbid

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
SQL> create table docs(
  2    doc_type char(1),
  3    doc_number int,
  4    doc_date date,
  5    state char(1));

Table created.

SQL>
SQL> insert into docs(doc_type) values ('A');

1 row created.

SQL> insert into docs(doc_type) values ('C');

1 row created.

SQL>
SQL> CREATE INDEX IDX_DOC
  2  ON DOCS(DOC_TYPE, DOC_NUMBER,DOC_DATE, STATE)
  3  GLOBAL PARTITION BY HASH (DOC_TYPE)
  4  ( PARTITION P1,
  5    PARTITION P2,
  6    PARTITION P3,
  7    PARTITION P4
  8  )
  9  PARALLEL LOGGING;

Index created.

SQL>
SQL> col object_id old_v object_id
SQL>
SQL> select object_id
  2    from obj
  3   where object_name = 'IDX_DOC'
  4     and object_type = 'INDEX';

 OBJECT_ID
----------
    135050

SQL>
SQL> col doc_type for a8
SQL> col subobject_name for a14
SQL>
SQL> select d.doc_type,
  2         o.subobject_name
  3    from (select /*+ no_merge index(docs (doc_type))*/
  4                 doc_type,
  5                 dbms_rowid.rowid_object(sys_op_lbid(&object_id., 'L', rowid)) data_object_id
  6            from docs
  7           where doc_type in ('A', 'C')) d,
  8         obj o
  9   where o.data_object_id = d.data_object_id;
old   5:                dbms_rowid.rowid_object(sys_op_lbid(&object_id., 'L', rowid)) data_object_id
new   5:                dbms_rowid.rowid_object(sys_op_lbid(    135050, 'L', rowid)) data_object_id

DOC_TYPE SUBOBJECT_NAME
-------- --------------
A        P3
C        P1

...
Рейтинг: 0 / 0
26.07.2019, 14:52
    #39841945
Migelle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
AmKadCейчас уже есть by list automatic
Понял. К сожалению это относится уже к 12+, а у меня тут 10.2 :(
И, как я понимаю, только к таблицам, индекс так секционировать не получится?

SeaGatesys_op_lbid
Спасибо. Вроде то что нужно. Отправил машину считать...
...
Рейтинг: 0 / 0
26.07.2019, 15:38
    #39841978
Migelle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
Вячеслав ЛюбомудровИ радуйся, если они легли в разные секции, а то в самое большое еще и соседнее приляжет.
Теперь я понял, о чем была фраза "радуйтесь": два самых больших значения у меня легли в одну партицию.

Я правильно понимаю, заставить их разлечься по разным возможности нет?
...
Рейтинг: 0 / 0
26.07.2019, 15:43
    #39841981
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
Через HASH-секционирование, насколько я понимаю, нет
Но почитай таки про LIST (возможно +HASH)
Или сделай на основании 2 полей, наиболее часть появляющихся в предикатах запросов

И вообще -- любое секционирование расчитывай по годности именно из запросов
...
Рейтинг: 0 / 0
26.07.2019, 15:45
    #39841982
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
В этом отношении и у HASH, и у LIST секционирования есть определенный недостаток -- они срабатывает только по равенству
...
Рейтинг: 0 / 0
29.07.2019, 11:43
    #39842474
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
Вячеслав ЛюбомудровЧерез HASH-секционирование, насколько я понимаю, нет
Можно изменить количество секций.
...
Рейтинг: 0 / 0
29.07.2019, 13:24
    #39842522
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
MigelleТеперь я понял, о чем была фраза "радуйтесь": два самых больших значения у меня легли в одну партицию.

Я правильно понимаю, заставить их разлечься по разным возможности нет?дык надо планировать заранее:
1. https://jonathanlewis.wordpress.com/2009/09/21/hash-partitions-2/
2. https://jonathanlewis.wordpress.com/2009/11/21/ora_hash-function/
...
Рейтинг: 0 / 0
29.07.2019, 14:33
    #39842550
Migelle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Секционированный индекс
andrey_anonymousМожно изменить количество секций.Я пытался сделать десяток секций - не помогло.
Вячеслав ЛюбомудровНо почитай таки про LIST Я прочитал уже. Но у меня таблица не секционирована, а LIST, насколько я понял, возможен только для таблицы. А хотелось обойтись индексом.
xtenderдык надо планировать заранее:Знать бы где упасть....
Хорошее чтиво, спасибо.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Секционированный индекс / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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