суббота, 4 августа 2012 г.

oracle 11g, advanced compression

начало

Жмем таблицу, напичканную varchar2, с целью освободить занятый tablespace.

SQL> ALTER TABLE NET.ACCESS COMPRESS FOR OLTP;
Table altered.


Лежащие в таблице данные не изменяются, что бы их сжать, нужно пошевелить таблицу, передвинуть например.

SQL> alter table NET.ACCESS move tablespace TYYY;
Table altered.


Ждем, если нужно, возвращаем обратно:

SQL> alter table NET.ACCESS move tablespace TXXX;
Table altered.


Проверяем состояние индексов:

SQL> select index_name, status, index_type from user_indexes;
INDEX_NAME STATUS INDEX_TYPE
------------------------------ -------- ---------------------------
IDX_ACCESS$DTO       UNUSABLE NORMAL
IDX_ACCESS$PERSON    UNUSABLE NORMAL
IDX_TMP$NET_LOGIN    VALID    NORMAL

3 rows selected.


Ребилдим и для большего экономического и тормозящего эффекта сжимаем индексы:

SQL> alter index IDX_ACCESS$DTO rebuild compress 1;
Index altered.


Для ускорения можно не писать в redo log:

SQL> alter index IDX_ACCESS$DTO rebuild unrecoverable;
Index altered.


...

Проверяем
SQL> select index_name, status, index_type from user_indexes;

INDEX_NAME                STATUS INDEX_TYPE
------------------------------  --------      ---------------------------
IDX_ACCESS$DTO         VALID   NORMAL
IDX_ACCESS$PERSON      VALID   NORMAL
IDX_TMP$NET_LOGIN      VALID   NORMAL

3 rows selected.


Данная конкретная таблица сжалась с 35 до 8 Гб, из-за обилия повторяющегося текста.

PROFIT! =)

Комментариев нет: