powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Партицирование с возможностью убрать партицию в архив
25 сообщений из 51, страница 1 из 3
Партицирование с возможностью убрать партицию в архив
    #39955092
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посоветуйте лучший вариант.
Есть большая таблица которую можно партицировать по месяцам (буфер сообщений) . Т.е. изменений в прошлых месяцах не бывает.
Хочу реализовать партицирование с возможностью убирать данные из прошлых месяцев безвозвратно в архив для освобождения места т.е. если они понадобятся восстановить одну партицию.
Мне пока пришел в голову только один вариант
а) Сделать партицированную таблицу перелить туда нужные данные.
б) По прошествии нескольких месяцев - прошлый период заархивировать , а после выполнить команду TRUNCATE TABLE PartitionTable1 WITH (PARTITIONS (2,
в) Сделать shrink файловой группы заархивированной партиции тем самым освободив место
Из минусов - truncate по партиции поддерживается только в SQL Server 2016 (13.x), а у меня 2008r2 но это решаемо.
Как понимаю штатных средств сделать отсоединение партиции нет ни в какой версии MS SQL Server.
Возможно есть какие то еще варианты?
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955106
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76
Как понимаю штатных средств сделать отсоединение партиции нет ни в какой версии MS SQL Server.
Как это нет, для чего тогда нужны партиции???
См. ALTER TABLE ... SWITCH ...
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955108
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
selis76
Как понимаю штатных средств сделать отсоединение партиции нет ни в какой версии MS SQL Server.
Как это нет, для чего тогда нужны партиции???
См. ALTER TABLE ... SWITCH ...

Видел в доке но не понимаю как оно мне может помочь в вопрос освобождения места. Основная цель, легко отстегивать партиции в архив освобождая место на дисках.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955112
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76
alexeyvg
Как это нет, для чего тогда нужны партиции???
См. ALTER TABLE ... SWITCH ...

Видел в доке но не понимаю как оно мне может помочь в вопрос освобождения места. Основная цель, легко отстегивать партиции в архив освобождая место на дисках.
"Отстёгивать в архив" не совсем понятное задание :-)

Я бы хотел, что бы в сиквеле можно было отсоединить файлгруппу от базы, и подсоединить её к другой базе - вот это было бы "отстёгивать в архив". Или положить файлы на ленту, а потом, через 10 лет, подсоединить к этой или другой базе.

Так что будем считать, что вы как то там перенесли данные из партиции в архив, и теперь хотите освободить место.

Для этого
1) делаете пустую таблицу, такую же, как партицированная, но без секциониролвания.
2) Потом делаете ALTER TABLE ... SWITCH ..., и данные секции оказываются в этой новой таблице, а партиция освобождается.
3) Далее, если данные не нужны, дропаете эту таблицу (или делаете TRUNCATE) - место освободилось.
4) Далее, если вам не нужна пустая секция, то можете её схлопнуть, выполнив ALTER PARTITION FUNCTION ... MERGE RANGE. Но для освобождения места это не нужно.
5) (если партиции в отдельных файлгруппах) После этого можно либо шринкнуть файл до пустого (если не делать (4)), либо его удалить (если делать (4))
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955113
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76,

"Легко отстегивать" легко. Но вот перемещать в архив придется переливкой. Волшебства, по которому кусок дынных из одного файла "легко" переместится в другой, нет.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955114
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
1) делаете пустую таблицу, такую же, как партицированная, но без секциониролвания.
Если партиции в отдельных файлгруппах, то делать таблицу её надо в удаляемой файлгруппе.

alexeyvg
3) Далее, если данные не нужны, дропаете эту таблицу (или делаете TRUNCATE) - место освободилось.
Если партиции в отдельных файлгруппах, то только drop, ибо даже пустая таблица сделает файлгруппу непустой
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955115
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич
selis76,

"Легко отстегивать" легко. Но вот перемещать в архив придется переливкой. Волшебства, по которому кусок дынных из одного файла "легко" переместится в другой, нет.
Вот это да, печально, а как было бы хорошо пинать файлргуппы между базами
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955171
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76,

Давайте начнет с другого. А что вы в точности понимаете под "архивировать" партицию или её данные?
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955186
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76
Посоветуйте лучший вариант.


Тупо делать

Код: sql
1.
2.
3.
4.
delete t 
  output deleted.* into archiveDB..archiveTable
  from mainDB..мainTable as t
  where t.Date < @ArchiveDate



И не выдумывать приключений на собственную задницу.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955192
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
selis76
Посоветуйте лучший вариант.

Тупо делать

Код: sql
1.
2.
3.
4.
delete t 
  output deleted.* into archiveDB..archiveTable
  from mainDB..мainTable as t
  where t.Date < @ArchiveDate



И не выдумывать приключений на собственную задницу.
Простое решение всегда лучше сложного :-)

Но если данных действительно много, то приходится оптимизировать (как у selis76 - непонятно, про размеры он не писал).
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955235
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
selis76
пропущено...

Видел в доке но не понимаю как оно мне может помочь в вопрос освобождения места. Основная цель, легко отстегивать партиции в архив освобождая место на дисках.
"Отстёгивать в архив" не совсем понятное задание :-)

Я бы хотел, что бы в сиквеле можно было отсоединить файлгруппу от базы, и подсоединить её к другой базе - вот это было бы "отстёгивать в архив". Или положить файлы на ленту, а потом, через 10 лет, подсоединить к этой или другой базе.

Так что будем считать, что вы как то там перенесли данные из партиции в архив, и теперь хотите освободить место.
.....

Задача простая -
взять секцию данных (за месяц) положить на ленту, а если ктото попросит архивные данные вернуть их в секцию той же таблицы. Поскольку это последовательный буфер сообщений, причины возврата секции могут быть разные напр нужно переимпортировать данные в незакрытом годе по новому алгоритму, либо аудиторы попросят исходные данные на основе которых были транзакции. Эти причины сравнительно редкие, а объем за год 400 миллионов записей с XML полем, и гдето 5 терабайт. Bcp даже месяц таких данных тяжело переваривает, а зеркалировать это для отказоустойчивости накладно.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955238
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
selis76
Посоветуйте лучший вариант.


Тупо делать

Код: sql
1.
2.
3.
4.
delete t 
  output deleted.* into archiveDB..archiveTable
  from mainDB..мainTable as t
  where t.Date < @ArchiveDate



И не выдумывать приключений на собственную задницу.

Без приключений в моем случае никак, Transaction log нерезиновый когда за год 400 миллионов записей , а если пакетами записей делать, то нужно городить хороший скрипт на TSQL . Delete самая накладная операция , да еще индексы все затормозят а их отключать нельзя, поскольку это буфер сообщений который должен быть почти всегда Online
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955270
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76,

если только копировать секцию в новую базу и эту базу бэкапить. Саму секцию очищать при помощи switch/truncate. Обратное действие такое же - восстановление бэкапа и копирование в исходную базу, если требуется, через промежуточную таблицу/switch.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955336
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76
alexeyvg
пропущено...
"Отстёгивать в архив" не совсем понятное задание :-)

Я бы хотел, что бы в сиквеле можно было отсоединить файлгруппу от базы, и подсоединить её к другой базе - вот это было бы "отстёгивать в архив". Или положить файлы на ленту, а потом, через 10 лет, подсоединить к этой или другой базе.

Так что будем считать, что вы как то там перенесли данные из партиции в архив, и теперь хотите освободить место.
.....

Задача простая -
взять секцию данных (за месяц) положить на ленту, а если ктото попросит архивные данные вернуть их в секцию той же таблицы. Поскольку это последовательный буфер сообщений, причины возврата секции могут быть разные напр нужно переимпортировать данные в незакрытом годе по новому алгоритму, либо аудиторы попросят исходные данные на основе которых были транзакции. Эти причины сравнительно редкие, а объем за год 400 миллионов записей с XML полем, и гдето 5 терабайт. Bcp даже месяц таких данных тяжело переваривает, а зеркалировать это для отказоустойчивости накладно.
Понятно.

Увы, просто скопировать файлы секции нельзя. так что только либо копировать данные, либо выгружать bcp. Зеркалирование тут неважно, оно же не заменяет бакапа/выгрузки в архив.

По моему опыту, bcp в нейтив формат будет быстрый.
Секции на месяц будут по полтеррабайта, в общем не особо много, но, конечно, дисковые подсистемы должны соответствовать. У меня были ссуточные секции по 150 гигов, не помню точно, сколько их bcp выгружал, но вроде меньше часа. На слабом железе.

Выгружать лучше из отсоединённой секции, что бы уж точно ничего не блокировать, и потом удалять эти данные, после проверки корректности выгрузки, и записи её на ленту.

Владислав Колосов
если только копировать секцию в новую базу и эту базу бэкапить
Не знаю, будет ли быстрее копирование, чем bcp
Но этот вариант тоже можно проверить.
Прямо делать select * into из отсоединённой секции.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955346
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76
aleks222
пропущено...


Тупо делать

Код: sql
1.
2.
3.
4.
delete t 
  output deleted.* into archiveDB..archiveTable
  from mainDB..мainTable as t
  where t.Date < @ArchiveDate



И не выдумывать приключений на собственную задницу.

Без приключений в моем случае никак, Transaction log нерезиновый когда за год 400 миллионов записей , а если пакетами записей делать, то нужно городить хороший скрипт на TSQL . Delete самая накладная операция , да еще индексы все затормозят а их отключать нельзя, поскольку это буфер сообщений который должен быть почти всегда Online


Не смешите мои тапочки.

Весь скрипт:
Код: sql
1.
delete top(nnn) ...
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955352
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Код: sql
1.
delete top(nnn) ...

Удалять все данные из секции через delete?
Вы всерьез считаете это оптимальным методом?
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955353
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
aleks222
Код: sql
1.
delete top(nnn) ...

Удалять все данные из секции через delete?
Вы всерьез считаете это оптимальным методом?


Секция страдальцу НЕ нужна.
Кластерный индекс по дате и фсе.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955355
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,

И правда, транкейт для трусов. Он же примерно около 0 байт в лог напишет, не будет долго и упорно на вторичной реплике применяться, не будет долго и упорно в лог бэкапиться. Скукотища, в общем.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955357
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Секция страдальцу НЕ нужна.
Кластерный индекс по дате и фсе.
DELETE вместо удаления секции, для 500гб ежемесячных данных?
По моему, это как раз тот случай, когда нужно использовать секционирование. Не то, что без него не обойтись (удаление по 20 гб в день мелкими порциями вполне реально, при кластерном индексе по дате), но польза будет.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955382
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич
aleks222,

И правда, транкейт для трусов. Он же примерно около 0 байт в лог напишет, не будет долго и упорно на вторичной реплике применяться, не будет долго и упорно в лог бэкапиться. Скукотища, в общем.


Ну, если бы надо было только транкейтнуть. Желания страдальца немного шире.

alexeyvg
aleks222
Секция страдальцу НЕ нужна.
Кластерный индекс по дате и фсе.
DELETE вместо удаления секции, для 500гб ежемесячных данных?
По моему, это как раз тот случай, когда нужно использовать секционирование. Не то, что без него не обойтись (удаление по 20 гб в день мелкими порциями вполне реально, при кластерном индексе по дате), но польза будет.


Если цель: быстро и сразу.
Да флаг ему в руки.
Только куда торопиться?
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955393
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

пустую базу можно создавать сразу нужного размера, если применить bulk вставку при помощи SSIS, то должно быть быстро. Плюс надежность резервных копий. Хотя у Вас практический опыт применения.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39955417
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
пустую базу можно создавать сразу нужного размера
Это конечно, я и файлы для секций сразу создавал нужного размера

Владислав Колосов
Плюс надежность резервных копий.
По удобству это хорошее решение.
И вообще, можно замутить восстановление (при необходимости) таких баз, и модификацию вьюх для доступа к архивным "секциям" (объединяя архивные данные )
Если стоит задача регулярного доступа к архивным данным, то получится быстро.

PS Мы SSIS не применяли, потому что у нас архивный сервер был доступен только по sftp, поэтому была такая извращённая схема.
PPS А только по sftp, потому что сетевые админы клиента где то случайно закрыли порты, и не знали, где
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39959499
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Владислав Колосов
пустую базу можно создавать сразу нужного размера
Это конечно, я и файлы для секций сразу создавал нужного размера

Владислав Колосов
Плюс надежность резервных копий.
По удобству это хорошее решение.
И вообще, можно замутить восстановление (при необходимости) таких баз, и модификацию вьюх для доступа к архивным "секциям" (объединяя архивные данные )
Если стоит задача регулярного доступа к архивным данным, то получится быстро.

PS Мы SSIS не применяли, потому что у нас архивный сервер был доступен только по sftp, поэтому была такая извращённая схема.
PPS А только по sftp, потому что сетевые админы клиента где то случайно закрыли порты, и не знали, где

спасибо за развернутый ответ
но как я понимаю bcp индексы не сохраняет потом их ребилдить отдельно - неудобно, но решаемо
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39959503
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
alexeyvg,

пустую базу можно создавать сразу нужного размера, если применить bulk вставку при помощи SSIS, то должно быть быстро. Плюс надежность резервных копий. Хотя у Вас практический опыт применения.


В принципе красиво будет, как понимаю switch на другую базу пройдет сразу с индексами
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39959511
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76
Владислав Колосов
alexeyvg,

пустую базу можно создавать сразу нужного размера, если применить bulk вставку при помощи SSIS, то должно быть быстро. Плюс надежность резервных копий. Хотя у Вас практический опыт применения.


В принципе красиво будет, как понимаю switch на другую базу пройдет сразу с индексами


А есть способ перекинуть файловую группу или файл БД из одной БД в другую БД.
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 1 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Партицирование с возможностью убрать партицию в архив
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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