Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Изменить key compression для iot partitioned таблицы  [new]
Author the new one
Member

Откуда:
Сообщений: 251
Что-то как ни пробовал - не выходит. То ORA-28660: Partitioned Index-Organized table may not be MOVEd as a whole, то ORA-14052: partition-extended table name syntax is disallowed in this context, то ORA-14020: this physical attribute may not be specified for a table partition

Не подскажет кто? Или это вообще нельзя?
30 окт 08, 16:40    [6377591]     Ответить | Цитировать Сообщить модератору
 Re: Изменить key compression для iot partitioned таблицы  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Если таблица изначально была создана NOCOMPRESS, то никак
Как вариант, пересоздать с COMPRESS, а потом сделать NOCOMPRESS на нужные сегменты
tst> create table t1(a number, b number, c number, primary key (a, b))
  2  organization index
  3  partition by range (a)
  4  (partition p1 values less than (10),
  5   partition p2 values less than (maxvalue));

Table created.

tst> select index_name, partition_name, compression from user_ind_partitions;

INDEX_NAME                     PARTITION_NAME                 COMPRESS
------------------------------ ------------------------------ --------
SYS_IOT_TOP_15623              P1                             DISABLED
SYS_IOT_TOP_15623              P2                             DISABLED

tst> alter table t1 move partition p1 compress;
alter table t1 move partition p1 compress
            *
ERROR at line 1:
ORA-28659: COMPRESS must be specified at object level first


tst> drop table t1;

Table dropped.

tst> create table t1(a number, b number, c number, primary key (a, b))
  2  organization index
  3  partition by range (a)
  4  (partition p1 values less than (10),
  5   partition p2 values less than (maxvalue))
  6  COMPRESS;

Table created.

tst> select index_name, partition_name, compression from user_ind_partitions;

INDEX_NAME                     PARTITION_NAME                 COMPRESS
------------------------------ ------------------------------ --------
SYS_IOT_TOP_15629              P1                             ENABLED
SYS_IOT_TOP_15629              P2                             ENABLED

tst> alter table t1 move partition p1 nocompress;

Table altered.

tst> select index_name, partition_name, compression from user_ind_partitions;

INDEX_NAME                     PARTITION_NAME                 COMPRESS
------------------------------ ------------------------------ --------
SYS_IOT_TOP_15629              P1                             DISABLED
SYS_IOT_TOP_15629              P2                             ENABLED
Та же фишка и с любыми секционированными индексами
31 окт 08, 05:01    [6379193]     Ответить | Цитировать Сообщить модератору
 Re: Изменить key compression для iot partitioned таблицы  [new]
Author the new one
Member

Откуда:
Сообщений: 251
Вячеслав Любомудров
Если таблица изначально была создана NOCOMPRESS, то никак


Насколько я понимаю, это не тот compress.
31 окт 08, 11:16    [6380289]     Ответить | Цитировать Сообщить модератору
 Re: Изменить key compression для iot partitioned таблицы  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Для IOT именно тот
31 окт 08, 11:22    [6380367]     Ответить | Цитировать Сообщить модератору
 Re: Изменить key compression для iot partitioned таблицы  [new]
Author the new one
Member

Откуда:
Сообщений: 251
Вячеслав Любомудров
Для IOT именно тот


Ну и как мне compress c 1 поменять на 2?
31 окт 08, 17:54    [6384412]     Ответить | Цитировать Сообщить модератору
 Re: Изменить key compression для iot partitioned таблицы  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Только пересоздать
1 ноя 08, 03:30    [6385532]     Ответить | Цитировать Сообщить модератору
 Re: Изменить key compression для iot partitioned таблицы  [new]
semirax
Member

Откуда:
Сообщений: 450
Вячеслав Любомудров,
кстати такой момент.

Обратите внимание на Leaf blocks:)
create table t1(a number, b number, c number, primary key (a, b))
  organization index
  partition by range (a)
 (partition p1 values less than (10),
   partition p2 values less than (maxvalue))
  COMPRESS;

insert into t1 select 0-trunc(level/100),level,1 from dual connect by level<=100000;

analyze table t1 compute statistics for all indexes;
select index_name, compression,leaf_blocks from user_ind_partitions;

INDEX_NAME                     COMPRESS LEAF_BLOCKS
------------------------------ -------- -----------
SYS_IOT_TOP_52962              ENABLED            0
SYS_IOT_TOP_52962              ENABLED          200


alter table t1 move partition p1 nocompress;
analyze table t1 compute statistics for all indexes;
select index_name, compression,leaf_blocks from user_ind_partitions;
INDEX_NAME                     COMPRESS LEAF_BLOCKS
------------------------------ -------- -----------
SYS_IOT_TOP_52962              ENABLED            0
SYS_IOT_TOP_52962              DISABLED         276


alter table t1 move partition p1 compress;
analyze table t1 compute statistics for all indexes;
select index_name, compression,leaf_blocks from user_ind_partitions;


INDEX_NAME                     COMPRESS LEAF_BLOCKS
------------------------------ -------- -----------
SYS_IOT_TOP_52962              ENABLED            0
SYS_IOT_TOP_52962              ENABLED          210

Думаю, эффект 210>200 объясняется так:
COMPRESS -> NOCOMPRESS приводит к разрастанию списка leaf блоков секции индекса.
NOCOMPRESS -> COMPRESS приводит к сжатию внутри leaf блоков, но branch блоки остаются без изменений. То есть leaf-ы получаются более разреженные чем до всех манипуляций, а никакого "alter table t1 move partition p1 rebuild" нету...
1 ноя 08, 04:08    [6385542]     Ответить | Цитировать Сообщить модератору
 Re: Изменить key compression для iot partitioned таблицы  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Да тут вообще чудеса с rebuild
tst> create table t1(a number, b number, c number)
  2  partition by range (a)
  3  (partition p1 values less than (10),
  4   partition p2 values less than (maxvalue));

Table created.

tst> insert into t1 select 0-trunc(level/100),level,1 from dual connect by level<=100000;

100000 rows created.

tst> create index t1_idx on t1(a, b) local compress;

Index created.

tst> analyze table t1 compute statistics for all indexes;

Table analyzed.

tst> select index_name, compression,leaf_blocks from user_ind_partitions;

INDEX_NAME                     COMPRESS LEAF_BLOCKS
------------------------------ -------- -----------
T1_IDX                         ENABLED          375
T1_IDX                         ENABLED            0

tst> alter index t1_idx rebuild partition p1 nocompress;

Index altered.

tst> analyze table t1 compute statistics for all indexes;

Table analyzed.

tst> select index_name, compression,leaf_blocks from user_ind_partitions;

INDEX_NAME                     COMPRESS LEAF_BLOCKS
------------------------------ -------- -----------
T1_IDX                         DISABLED         290
T1_IDX                         ENABLED            0

tst> alter index t1_idx rebuild partition p1 compress;

Index altered.

tst> analyze table t1 compute statistics for all indexes;

Table analyzed.

tst> select index_name, compression,leaf_blocks from user_ind_partitions;

INDEX_NAME                     COMPRESS LEAF_BLOCKS
------------------------------ -------- -----------
T1_IDX                         ENABLED          375
T1_IDX                         ENABLED            0
Ну хоть радует, что к первоначальному вернулось
1 ноя 08, 04:20    [6385550]     Ответить | Цитировать Сообщить модератору
 Re: Изменить key compression для iot partitioned таблицы  [new]
semirax
Member

Откуда:
Сообщений: 450
Вячеслав Любомудров,

Насколько я помню, leaf блок сжатого b*tree индекса состоит из
1) неупорядоченной кучи префиксов/суффиксов строк. При "compress N" первые N столбцов считаются префиксом, остальное - суффиксом.
2) массива из номеров суффиксов (suffix slot array) по 2 байта/номер
3) массива вида [2 байта номер префикса; 2 байта ссылка на цепочку суффиксов]

Поэтому когда сами префиксы/суффиксы короткие (по 2-3 байта как в примере выше), то массивы номеров будет занимать основное место, и в итоге сжатие может приводить к еще большему разрастанию индекса.
1 ноя 08, 04:52    [6385563]     Ответить | Цитировать Сообщить модератору
 Re: Изменить key compression для iot partitioned таблицы  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
А разве суффиксы хранятся отдельно? По моему только префиксы
Если сделать этот индекс уникальным (compress 1 станет вместо 2), то результат будет идеинтичным твоему (210-276-210)
Кстати, интересный вопрос, почему для IOT первоначально создалось 200, а для индекса 210
1 ноя 08, 05:10    [6385569]     Ответить | Цитировать Сообщить модератору
 Re: Изменить key compression для iot partitioned таблицы  [new]
semirax
Member

Откуда:
Сообщений: 450
Вячеслав Любомудров
А разве суффиксы хранятся отдельно? По моему только префиксы


Вроде так: Картинка с другого сайта.
1 ноя 08, 05:23    [6385573]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить