|
Добавление нового диапазона секцианирования (ALTER PARTITION FUNCTION)
|
|||
---|---|---|---|
#18+
Коллеги, добрый день. Подскажите пожалуйста, как поступить в вопросе. Досталась в наследство база... Есть уже секцианированная по id таблица (RANGE LEFT) на 8+ миллиардов записей на много терабайт. Сейчас у этой таблицы настроено секцианирование на 9 секций (0, 1ккк, 2ккк, ... , 8ккк) На каждую секцию выделена своя файловая группа, сейчас приближаемся к 9 миллиардам, выделил новую файловую группу, но вот при ALTER PARTITION FUNCTION pf_id() SPLIT RANGE (9000000000) таблица блокируется на часы, откат длится примерно 4х времени. Как правильно добавить новый диапазон с минимальным влиянием? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 00:11 |
|
Добавление нового диапазона секцианирования (ALTER PARTITION FUNCTION)
|
|||
---|---|---|---|
#18+
Из того, что я вижу, хороших и быстрых вариантов у вас не осталось. Секции сплитить надо заранее, пока они пустые. Решение проблемы вертится вокруг того, чтобы убрать данные из последней секции в отдельную таблицу (через switch), сплитнуть секцию, потом данные вернуть. Однако загвоздка как раз в последнем пункте -- или физический перелив (порциями, с минимальным протоколированием, если есть условия), или чек-констрейнт соответствующий надо навесить на ту -- отдельную -- таблицу (тоже не быстрая операция, но, хотя бы не приводит к модификации данных) с последующим обратным свитчем. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 00:21 |
|
Добавление нового диапазона секцианирования (ALTER PARTITION FUNCTION)
|
|||
---|---|---|---|
#18+
UPD. Есть еще вариант не морочится с этой таблицей, создать новую с правильным секционированием, после 9ккк перестать писать в старую, но писать в новую, научить весь код с этой конструкцией работать и т.п. Может не полететь по ряду причин. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 00:28 |
|
Добавление нового диапазона секцианирования (ALTER PARTITION FUNCTION)
|
|||
---|---|---|---|
#18+
SergeyB., если есть место, создайте новую таблицу с дополнительными секциями. В старой таблице добавьте триггер, который будет сохранять изменения в новую таблицу. Сделайте копию данных из старой таблицы. После окончания копирования переименуйте таблицы и назначьте требуемые права и внешние ключи. Удалите старую таблицу. Обратите внимание, нет ли "исторических" и других производящих данные триггеров на старой таблице и связанных с ней представлений. Если Вы уверены, что старые данные не обновляются, то вместо копирования можно выполнить переключение секций. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 01:54 |
|
Добавление нового диапазона секцианирования (ALTER PARTITION FUNCTION)
|
|||
---|---|---|---|
#18+
А пишется равномерно во все секции? Или вы просто хотите преобразовать текущую секцию в архивную + рабочую? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 09:50 |
|
Добавление нового диапазона секцианирования (ALTER PARTITION FUNCTION)
|
|||
---|---|---|---|
#18+
uaggster, Пишется только в последнюю секцию, секцианирование по id, автоинкремент. Из старых секций данные только читаются, не модифицируются. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 10:50 |
|
Добавление нового диапазона секцианирования (ALTER PARTITION FUNCTION)
|
|||
---|---|---|---|
#18+
SergeyB., тогда переключите секцию в рядомстояшую таблицу, сделайте сплит пустой секции, перелейте новые данные в новую секцию, удалив их в рядомстоящей таблице, а потом верните рядомстоящую таблицу на место старой секции. Правда, нужно констрейнт будет создать, но, как я понимаю, это - быстро, т.к. по этому полу primary key построен. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 11:17 |
|
|
start [/forum/topic.php?fid=46&fpage=25&tid=1684715]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 158ms |
0 / 0 |