#sql #sql_server
есть две таблицы
tab1
| id | time |
tab2
| id | id_tab1 | value |
Нужно секционировать обе таблицы, в первой таблице диапазоном будет time, а во второй
таблице диапазоном будет id_tab1, начальное и конечно значение в секции таблицы tab1.id
один из вариантов который мне пришел на ум:
создать секции для tab1 на 10 лет в перед. с 2013-01-01 до 2020-01-01.
создать событие которое будет запускаться раз в месяц. Будет производится выборка
первого и последнего значения секции прошедшего периода и для tab2 будет разбиваться
последняя секция, отсекая прошедший месяц.
разделение секции происходит по алгоритму:
скинуть функцию (DROP PARTITION FUNCTION muFun).
создание вновь данной функции.
применение функции с указанием дополнительного диапазона разделения(ALTER PARTITION
FUNCTION myFun() SPLIT RANGE (500))
После применения данной функции я так понимаю таблица по новой будет секционироваться?
Или когда я сбрасываю функцию (DROP), я сбрасываю только функцию, и если при повторном
создании ее, я укажу те же диапазоны, которые были в данной функции изначально, изменения
претерпит только та секция в которой я буду изменять диапазон ранжирования или же все
таки вся таблица будет секционироваться по новой?
Ответы
Ответ 1
Вам не нужно сбрасывать функцию, чтобы добавить новый период. Просто добавляете командой ALTER PARTITION FUNCTION [имя функции]() SPLIT RANGE (GETDATE()) У нас такая команда выполняется в джобе раз в сутки, в этом же джобе последняя партиция переносится во временную таблицу: ALTER TABLE [таблица] SWITCH PARTITION $PARTITION.[имя функции](граница для переноса) TO [временная таблица] После чего временная таблица транкейтится TRUNCATE TABLE [временная таблица] А в основной таблице последняя перенесенная партиция сливается с предыдущей: ALTER PARTITION FUNCTION [имя функции]() MERGE RANGE (граница для переноса) Это самый быстрый способ избавления от лишних данных в партиционированных таблицах - собственно для этого во многом партиционирование и было сделано. В SQL Server 2016 работа с партициями еще упростилась - вы можете транкейтить сразу отдельные партиции, не перенося их во временные таблицы.
Комментариев нет:
Отправить комментарий