#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 работа с партициями еще упростилась - вы можете транкейтить сразу отдельные партиции, не перенося их во временные таблицы.
Комментариев нет:
Отправить комментарий