SHRINK SPACE оперативное сжатие сегмента

Почему поиск в таблице с небольшим количеством строк может отнять довольно много времени?

Если в таблице когда-то было большое количество строк, поиск может замедлиться, потому что Oracle должен просмотреть каждый блок, в котором когда-либо содержались данные – вплоть до маркера максимального заполнения таблицы (High Water Mark – HWM).
Способы ускорить таблицу:
1. drop and recreate (exp/imp)
2. truncate (exp the data, truncate it, imp the data)
3. alter TABLE move + rebuild indexes
4. SHRINK SPACE — Online Segment Shrink (оперативное сжатие сегмента) появилась в 10G
5. DBMS_REDEFINITION

ALTER TABLE имя_таблицы SHRINK SPACE [COMPACT] [CASCADE];
Задание этой команды без опций приводит к дефрагментации таблицы и уплотнению ее строк.
Затем HWM корректируется к новой высокой позиции и освобождает высвободившееся пространство.
Опция COMPACT проводит дефрагментацию, но не корректирует HWM.
Опция CASCADE сжимает не только названную таблицу, но и любые зависимые объекты, например, индексы.
Поскольку перемещенные строки будут иметь новый ROWID,
Вы должны отключить любые триггеры, которые срабатывают на основании ROWID, или они будут выполнены повторно.
Имеются также и другие ограничения: проконсультируйтесь в документации.

Пример с TRUNCATE:

LOCK TABLE ZTABLE
IN EXCLUSIVE MODE
NOWAIT;
create table ZTABLE2 AS select t.* from ZTABLE t;
truncate table ZTABLE;
insert into ZTABLE select * from ZTABLE2;
commit;
commit;

Пример в SHRINK SPACE:

--узнать размер таблицы до
select round(bytes /1024/1024, 2) mb
from   dba_segments
WHERE segment_name = upper('zrepl_msg_i');
alter table zrepl_msg_i enable row movement;
ALTER TABLE zrepl_msg_i SHRINK SPACE;
alter table zrepl_msg_i disable row movement;
--узнать размер таблицы после
select round(bytes /1024/1024, 2) mb
from   dba_segments
WHERE segment_name = upper('zrepl_msg_i');

Пример для партицированной таблицы

ALTER TABLE наименование_таблицы modify partition наименование_партиции SHRINK SPACE;
14:53
208
Нет комментариев. Ваш будет первым!
Загрузка...