четверг, 30 мая 2013 г.

Секционирование таблиц в Oracle. Загадочное увеличение размера файлов данных. Часть 2

Пересоздал табличные пространства и таблицу, создав по умолчанию две секции (каждая из которых в свою очередь включает по 4 подсекции):
CREATE TABLESPACE OP_J_01 DATAFILE 'op_j_tbs01.dbf' SIZE 128K AUTOEXTEND ON NEXT 1K MAXSIZE UNLIMITED;
CREATE TABLESPACE OP_J_02 DATAFILE 'op_j_tbs02.dbf' SIZE 128K AUTOEXTEND ON NEXT 1K MAXSIZE UNLIMITED;
CREATE TABLESPACE OP_J_03 DATAFILE 'op_j_tbs03.dbf' SIZE 128K AUTOEXTEND ON NEXT 1K MAXSIZE UNLIMITED;
CREATE TABLESPACE OP_J_04 DATAFILE 'op_j_tbs04.dbf' SIZE 128K AUTOEXTEND ON NEXT 1K MAXSIZE UNLIMITED;
CREATE TABLE ZAKUPKI_DEV.OPERATION_JOURNAL_REDIF
   (    OP_JOURNAL_ID NUMBER(20,0) NOT NULL ENABLE,
        ORDER_ID NUMBER(20,0),
        TMSTMP TIMESTAMP (6),
        EVENT_CLASS VARCHAR2(50)

   )
PARTITION BY RANGE (TMSTMP) INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
  SUBPARTITION BY LIST (EVENT_CLASS)
  SUBPARTITION TEMPLATE
    (
    SUBPARTITION EC_REGISTER_CONTRACTS VALUES ('REGISTER_CONTRACTS') TABLESPACE OP_J_01,
    SUBPARTITION EC_ORDER VALUES ('ORDER') TABLESPACE OP_J_02,
    SUBPARTITION EC_AUTHORIZATION VALUES ('AUTHORIZATION') TABLESPACE OP_J_03,
    SUBPARTITION EC_OTHER VALUES (DEFAULT) TABLESPACE OP_J_04
    )
(PARTITION p201101 VALUES LESS THAN (TO_DATE('01012011','ddmmyyyy')),
 PARTITION p201102 VALUES LESS THAN (TO_DATE('01022011','ddmmyyyy'))
) ENABLE ROW MOVEMENT;

Смотрим размер файлов данных:
TABLESPACE_NAME BYTES USER_BYTES
OP_J_01 19005440 18939904
OP_J_02 19005440 18939904
OP_J_03 19005440 18939904
OP_J_04 19005440 18939904

А вот это уже интересно. Получается, на каждую субпартицию заранее резервируется место в табличном пространстве: на одну субпартицию 10МБ, на две 18МБ.
Для чистоты эксперимента проделал тоже самое, но с созданием трех секций:
TABLESPACE_NAME BYTES USER_BYTES
OP_J_01 27394048 27328512
OP_J_02 27394048 27328512
OP_J_03 27394048 27328512
OP_J_04 27394048 27328512
Т.е. на три секции требуется 26МБ на каждую субпартицию. Похоже, это и есть ответ на вопрос из предыдущего поста, почему размер файлов данных вырос до 43МБ.

В результате этих манипуляций возникло нелепое предположение: может быть такое, что независимо от количества данных в каждой партиции размер файлов данных увеличивается синхронно для всех? Проведем эксперимент:
Заново создаю файлы данных и таблицу с одной секцией по-умолчанию (всё как в первом посте), имею размер файлов данных 10616832 байт (~10МБ).
Вставляю в таблицу 383940 записей с EVENT_CLASS = 'ORDER' и tmstmp < TO_DATE('01012011', 'ddmmyyyy'), ожидая при этом, что увеличиться только файл данных, соответствующий табличному пространству EC_ORDER VALUES:
TABLESPACE_NAME BYTES USER_BYTES
OP_J_01 10616832 10551296
OP_J_02 19005440 18939904
OP_J_03 10616832 10551296
OP_J_04 10616832 10551296

Так и получается. При этом на самом деле был создан дополнительный экстент для сегмента, соответствующего субпартиции P201101_EC_ORDER.
Нелепое предположение осталось неподтвержденным и это прекрасно :)

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

Отправить комментарий