powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разбиение секционированной таблицы на подсекции. Перенос данных
9 сообщений из 9, страница 1 из 1
Разбиение секционированной таблицы на подсекции. Перенос данных
    #39854317
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Плаваю в теме секционирования, прошу помочь.
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
Есть таблица вида
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE TEST_D
( "ID" NUMBER NOT NULL , 
"D_TIME" DATE, 
"SYS_ID" NUMBER,
"STATUS_ID" NUMBER, 
CONSTRAINT "PK_ID" PRIMARY KEY ("ID")
) 
PARTITION BY RANGE ("D_TIME") INTERVAL (NUMTODSINTERVAL(6,'DAY'))
(PARTITION "P_FIRST" VALUES LESS THAN (TO_DATE(' 2012-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') 
));
CREATE UNIQUE INDEX UK_TEST_D ON "TEST_D" ( "D_TIME", "SYS_ID", "STATUS_ID") LOCAL;


Размер таблицы чуть меньше террабайта с индексами, интервально делится по 6 дней

В таблице Поле SYS_ID неравномерно, это суточные данные, месячные, квартальные и тп.
Хочу На тестовом сервере протестировать вариант с добавлением подсекций
Насколько понимаю, это будет вариант приведенный ниже
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE TEST_D_2
( "ID" NUMBER NOT NULL , 
"D_TIME" DATE, 
"SYS_ID" NUMBER,
"STATUS_ID" NUMBER, 
CONSTRAINT "PK_ID_TEST_D_2" PRIMARY KEY ("ID")
) 
PARTITION BY RANGE ("D_TIME") INTERVAL (NUMTODSINTERVAL(6,'DAY'))
SUBPARTITION BY LIST(SYS_ID)

SUBPARTITION TEMPLATE 
      (SUBPARTITION sp_part1 VALUES ('1'),
      SUBPARTITION sp_part2 VALUES ('10'),
       SUBPARTITION sp_part2 VALUES ('30')
      SUBPARTITION others VALUES (DEFAULT)
      )
(
PARTITION "P_FIRST" VALUES LESS THAN (TO_DATE(' 2012-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) 
);



Первичные вопросы )
1) Правильный ли вариант с разбиением на секции таблицы, использование LIST?
2) Возможно текущую таблицу TEST_D разбить на подсекции? Или требуется перегонять данные в новую таблицу?
...
Рейтинг: 0 / 0
Разбиение секционированной таблицы на подсекции. Перенос данных
    #39854331
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorSm1) Правильный ли вариант с разбиением на секции таблицы, использование LIST?
вы не делите таблицу на секции просто ради того, чтобы поделить ее на секции. вы решаете какие-то прикладные задачи.
ускорить чтение данных.
ускорить загрузку данных.
упростить загрузку данных.
упростить операции по обслуживанию таблицы.
и т.д.
какую конкретно задачу вы хотите решить, добавив в таблицу подсекции? когда будет понимание задачи - тогда можно будет разбираться, правильно ли вы ее решаете.
...
Рейтинг: 0 / 0
Разбиение секционированной таблицы на подсекции. Перенос данных
    #39854385
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorSm,

автор
Код: plsql
1.
PARTITION BY RANGE ("D_TIME") INTERVAL (NUMTODSINTERVAL(6,'DAY'))



Странное какое-то партицирование. Почему именно 6 дней а не неделя?

авторSYS_ID неравномерно, это суточные данные, месячные, квартальные

И все в одной таблице?
...
Рейтинг: 0 / 0
Разбиение секционированной таблицы на подсекции. Перенос данных
    #39854387
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flexgenИ все в одной таблице?
А почему бы и нет?
...
Рейтинг: 0 / 0
Разбиение секционированной таблицы на подсекции. Перенос данных
    #39854390
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousА почему бы и нет?

Я не знаю что у него там, но если в таблице хранятся "сырые" данные, скажем, посуточно, и агрегированные за месяц/квартал/год то это минимум странно. Я просто не понял этой фразы:

авторSYS_ID неравномерно, это суточные данные, месячные, квартальные

Поэтому переспросил.
...
Рейтинг: 0 / 0
Разбиение секционированной таблицы на подсекции. Перенос данных
    #39854697
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flexgenскажем, посуточно, и агрегированные за месяц/квартал/год то это минимум странно.
Не более странно, чем автоматически плодить таблицы под агрегаты высоких порядков.
Если есть возможность организовать эффективный доступ к агрегатам в общей таблице, то городить дополнительные не нужно.
...
Рейтинг: 0 / 0
Разбиение секционированной таблицы на подсекции. Перенос данных
    #39856265
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день
Спасибо, что откликнулись
Извините за несвоевременный ответ.
1)Основная задача это ускорение чтение данных, если такая операция как загрузка данных будет осуществляться быстрее, то тоже отлично.
Далее, да сейчас все данные в одной таблице. В текущей реализации переделка программного кода с выделением отдельной таблицы, со слов разработчиков, трудоёмка и может обрасти новыми багами )
Да и сущностей туда будет еще добавляться.

Деление на 6 дней исторически сложилось. Да и на форме они в основном смотрят по 6 дней по суточным данным. Повторюсь, SYS_ID - это какой тип данных, суточные, месячные и свои какие-то.
Сейчас из этой таблички стали смотреть, в основном два разных типа пользователя, каждый по своему типу данных
Выборка по временным меткам по D_TIME в 99% случаев будет, к нему же выполняется выборка по SYS_ID.
LIST в этом случае кажется весьма эффективным.
Но вопрос , насколько будет эффективнее по времени выборки разбиение на подсекции чем тот же локальный индекса по полям "D_TIME", "SYS_ID") ?;
2) Ну и, первично, чтоб протестировать производительность мне надо отдать тестерам таблицы с таким же объемом данных.
Ну и здесь "Возможно текущую таблицу TEST_D разбить на подсекции? Или требуется перегонять данные в новую таблицу?"
Данные в этом случае хранятся физически по другому? Создаём новую и переносим данные через EXCHANGE PARTITION?
...
Рейтинг: 0 / 0
Разбиение секционированной таблицы на подсекции. Перенос данных
    #39856296
chidoriami
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorSm,

можно руками пересоздать таблицу (создать таблицу нужной структуры, перелить данные, старую дропнуть, новую переименовать как старую),
можно и не руками - есть пакет dbms_redefinition, он должен справиться

по времени примерно одинаково получается (как-то давно довелось потестить)


сабпартицирование by list выглядит подходяще =)

только вопрос - как я понимаю, агрегат 30 дней лежит с D_TIME = последнему дню периода (ну или первому, не суть)

такие агрегаты считаются каждый день или один раз в месяц?
т.е. месяц 30 дней включает в себя 5 партиций по 6 дней
только в одной сабпартиции с SYS_ID=30 будут лежать данные или все таки в каждой?

з.ы. и раз уж все равно пересоздавать, может, сделать партиции по дню?
...
Рейтинг: 0 / 0
Разбиение секционированной таблицы на подсекции. Перенос данных
    #39856734
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chidoriami,
спасибо за хорошие вопросы.
Отпуск негативно сказался на мозговой деятельности )
Иногда таки надо пойти помучать разработчиков и аналитиков.
А не смотреть текущую реальность )
Итого Поле SYS_ID неравномерно сейчас, но будет стремится к тому что это поле будет равномерно )
Аналог грубый -прогноз температуры на месяц
Есть фактическое измерение температуры, измеренное на каждый день
Есть прогнозное, но будет записываться на каждый день. Раньше это была запись раз в месяц. Сейчас сделали модель, что будет красиво распределять на дни
итого
авторТакие агрегаты считаются каждый день или один раз в месяц?
Будут каждый день.
авторт.е. месяц 30 дней включает в себя 5 партиций по 6 дней
только в одной сабпартиции с SYS_ID=30 будут лежать данные или все таки в каждой?
Будут лежать в каждой
авторз.ы. и раз уж все равно пересоздавать, может, сделать партиции по дню?
Так исторически сложилось )выборка самая обычная по 5-6 дней поэтому так и делали
Но можно пробовать.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разбиение секционированной таблицы на подсекции. Перенос данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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