powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Партицирование с возможностью убрать партицию в архив
51 сообщений из 51, показаны все 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
Партицирование с возможностью убрать партицию в архив
    #39959533
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Весь скрипт:
Код: sql
1.
delete top(nnn) ...



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

Критик
Делал так на несекционированных логах, когда их по чуть-чуть переносил в архив. Работало вполне нормально на довольно большом объеме.
Определение "большой объём" - это когда удаление данных за сутки начинает превышать сутки :-)

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

А как боролись с объемом файлов данных которые порождает BCP - ? клали в папки типа Compressed folders?
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39959847
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76
alexeyvg
пропущено...
Я же в секции загружал. Как описал выше.
То есть bcp в таблицу-кучу, потом строю кластерный индекс, потом переключаю секцию.
.... ?

А как боролись с объемом файлов данных которые порождает BCP - ? клали в папки типа Compressed folders?
Надо было, но как то не заморачивался :-) На суточную порцию места хватало.
Потом, перед копированием, коненчно, сжимал.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39960547
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно, а так - будет работать:
1. Создаем таблицу в другой БД.
2. Создаем к ней алиас в основной БД
3. Переименовываем таблицу в основной базе.
4. Создаем view в основной базе, и называем его как таблицу в основной базе:
Select * from таблица_в_основной_базе
Where ключ_по_которому_разрезана_таблица between всё_что_относится_к_основной_таблице
union all
Select * from алиас
Where ключ_по_которому_разрезана_таблица between всё_что_относится_к_архивной_таблице

И в дальнейшем везде оперируем только view.
Ну и, собственно, загрузка старых данных - это bcp в рядомстоящую таблицу в архивной базе, а потом alter table switch.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #39960603
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Интересно, а так - будет работать:
1. Создаем таблицу в другой БД.
2. Создаем к ней алиас в основной БД
3. Переименовываем таблицу в основной базе.
4. Создаем view в основной базе, и называем его как таблицу в основной базе:
Select * from таблица_в_основной_базе
Where ключ_по_которому_разрезана_таблица between всё_что_относится_к_основной_таблице
union all
Select * from алиас
Where ключ_по_которому_разрезана_таблица between всё_что_относится_к_архивной_таблице

И в дальнейшем везде оперируем только view.
Ну и, собственно, загрузка старых данных - это bcp в рядомстоящую таблицу в архивной базе, а потом alter table switch.
Да, конечно.
Сиквел на это специально рассчитан, такая вьюха называется "Секционированное представление" (на разных серверах "Распределённое секционированное представление"), и сервер оптимизирует обращения к отдельным его "частям".

После появления секционирования этим представлениям стали меньше уделять внимания, но раньше это был единственный способ секционирования.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #40054555
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста способы наиболее эффективного бэкапа для партицированных таблиц, которые используют файловые группы в циклическом режиме
Т.е. заниматься частым архивированием только активной партиции
+ иметь возможность truncate данные одной партиции и восстановить ее без манипуляций со switch
Из
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/backup-transact-sql?view=sql-server-ver15

https://blog.coeo.com/five-cool-things-you-can-do-using-partitioning

Я понял что можно переводить в режим read only только файловые группы и архивировать именно файловые группы, но я не вижу команд для архивирования просто партиций . Просто при циклическом переключении файловых групп неудобно их переводить в Read only и обратно (нужно следить скриптом)
SQL Server 2019
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #40054578
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76
Подскажите пожалуйста способы наиболее эффективного бэкапа для партицированных таблиц, которые используют файловые группы в циклическом режиме
Т.е. заниматься частым архивированием только активной партиции
...
Я понял что можно переводить в режим read only только файловые группы и архивировать именно файловые группы, но я не вижу команд для архивирования просто партиций . Просто при циклическом переключении файловых групп неудобно их переводить в Read only и обратно (нужно следить скриптом)
SQL Server 2019
Под архивированием вы подразумеваете бакап?
Без отдельных файловых групп никак.
Сиквел не имеет функциональности (как и любые другие СУБД) делать бакап и рестор отдельных секторов в файле базы данных.
selis76
+ иметь возможность truncate данные одной партиции и восстановить ее без манипуляций со switch
"Транкейт партиции без манипуляций со switch" по моему появился в последних версиях.
"Восстановить" нельзя, т.к. нельзя бакапить и рестроить отдельные сектора в файле БД, как я уже говорил.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #40054581
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg

"Восстановить" нельзя, т.к. нельзя бакапить и рестроить отдельные сектора в файле БД , как я уже говорил.

для полноты картины, можно восстанавливать страницы файла
Код: sql
1.
RESTORE DATABASE { database_name }   PAGE = 'file:page [ ,...n ]'...
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #40054587
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad
alexeyvg"Восстановить" нельзя, т.к. нельзя бакапить и рестроить отдельные сектора в файле БД , как я уже говорил.

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

Под архивированием вы подразумеваете бакап?
Без отдельных файловых групп никак.

Да именно бэкап. База является буфером который наполняется последовательно , и поэтому хотелось сократить время резервного копирования + иметь возможность оперативно убирать \восстанавливать старые партиции.
Но видимо придется делать обычную схему - полный бэкап раз в неделю + инкрементальный + дневной бэкап логов.
А с архивными партициями управляться через BCP , конечно неудобно что в MS SQL нет удобного механизма подключения и отключения архивных партиций а только через BCP + Switch .
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #40054649
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76,

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

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

Под архивированием вы подразумеваете бакап?
Без отдельных файловых групп никак.

Да именно бэкап. База является буфером который наполняется последовательно , и поэтому хотелось сократить время резервного копирования + иметь возможность оперативно убирать \восстанавливать старые партиции.
Но видимо придется делать обычную схему - полный бэкап раз в неделю + инкрементальный + дневной бэкап логов.
А с архивными партициями управляться через BCP , конечно неудобно что в MS SQL нет удобного механизма подключения и отключения архивных партиций а только через BCP + Switch .


посмотрите тут Partial Backups
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #40073971
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо сказать switch это еще то приключение даже если делаешь таблицы как копия метаданных
switch out проходит норм , а для switch in приходится городить констрейнт

ALTER TABLE [dbo].[msg_buffer_temp] ADD CONSTRAINT Range_msg_buffer_temp CHECK (MsgCounter>2560000000 AND MsgCounter<=2590000000);
иначе MS SQL выдает ошибку "allow values that are not allowed by range defined by partition"

Т.е. получается что партицирование как инструмент удобного перевода исторических данных в архив и обратно (по партициям) не такое уж и удобное.
1) Alter table switch работает только в рамках одной файловой группы в другую базу его не сделаешь
2) Бэкап, truncate , восстановление нужной партиции можно сделать только через BCP - долго
3) Бэкап\восстановление отдельных партиций через файловые группы можно делать только если она в read -only, т.е последующий транкейт не сделаешь.

Т.е. с одной стороны куча контролей по констрейнтам, а с другой узкие возможности по переносу данных.


Получается если чтото историческое хочешь отправить в архив проще
1) Сделать архив базы buffer
2) Затранкейтить ненужные партиции
Если понадобится восстановить отдельную партицию
3) При необходимости восстановить его в том же Instance SQL под именем buffer_backup
4) Далее через insert перенести данные в нижний диапазон. Хорошо что insert почти не раздувает transaction log
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #40073978
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76
для switch in приходится городить констрейнт
Да, это в МС не доделали, конечно.
Но всё равно же быстрее, чем вставка/удаление обычными insert delete.

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

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

зачем гонять из архива секции, я выше написал магические слова - "секционированное представление". Достаточно изменить представление, чтобы архив стал доступен. Читаете, но не видите... И Алексей об этом же пишет.


Я читал про секционированное представление, но для себя решил пока его не использовать по 3м причинам
1) Чтобы соединить два набора данных (архивная + актуальная таблицы) и это будет View с union причем таблиц из разных баз одного инстанса . Т.е. для оптимизатора это будут по сути разные таблицы с разными индесами (даже если там все логически одинаково) и он наверняка будет всегда делать поиск по обоим всегда.
2) Мне может понадобится восстановить более чем один диапазон из архива из разных бэкапов.
3) У меня много запросов с разными комбинациями условий и join + чтобы избежать обращения ко всем партициям (известная особенность) приходится везде ставить условие на основное поле партицированного индекса MsgCounter.

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

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

Похожая проблема на oltp базе.

Пока что делаю топорно пару раз в год:

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

- переименовываю обе, чтобы вставки шли в новую

- копирую старую в архив и удаляю

Это работает, так как данные в этих таблицах не меняются.

Партиционированные виды не применяю, т.к. не выполнить условие по PK.

Партиционированные таблицы (скользящее оконо) не применяю, так как:
таблица периодически меняется, в случае ошибки с организацией скользящего окна ляжет приложение
т.е. что бы что то изменить, нужен человек с опытом, нужно тестировать - т.е. затраты времени на небольшую сервисную функцию.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #40074478
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76
1) Чтобы соединить два набора данных (архивная + актуальная таблицы) и это будет View с union причем таблиц из разных баз одного инстанса . Т.е. для оптимизатора это будут по сути разные таблицы с разными индесами (даже если там все логически одинаково) и он наверняка будет всегда делать поиск по обоим всегда
Всё правильно вы описали, то есть всё будет работать так же, как для секционированной таблицы.
selis76
2) Мне может понадобится восстановить более чем один диапазон из архива из разных бэкапов.
Вы неправильно поняли.
Вы можете иметь произвольное количество архивных копий, и подсоединять их, модифицируя само представление. Можете включить один архив в представление/ можете все сразу, варианты ограничены только вашей фантазией и железом.

Например, у вас есть база с транзакциями за активный период, и базы за прошедшие месяцы.
Архивные базы хранятся на ленте.
Вы копируете с ленты баз за феврали с 2001 по 2010 год, потом оп - за 1 мс меняется представление ,у вас доступны активный период, плюс феврали за 10 лет.

С секционировнаной таблицей для того же самого нужно будет дополнительно восстанавливать бакапы, плюс делать чек констрэйн. Присоединять секции снаружи там нельзя, чек-констрейн оно тоже почему то не сохраняет при отоединении.
selis76
Учитывая это решил, что заставлять оптимизатор Microsoft работать правильно сложнее чем загнать архивные данные через insert если нужно.
А вы пробовали? По моему, он однаково работает с секционированными представлениями и таблицами. Если может, обращается к одной секции (таблице), если не может, то ко всем
Кроме того, не преувеличивайте негативные последствия обращения ко всем секциям, там накладные расходы проявляются только для огромного потока сверх-лёгких обращений.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #40074650
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

я правильно понял, что вы предлагает менять код на проде в онлайн режиме, так сказать? Это универсальный совет или только для случая ленточных баз? С ними я дела не имел, поэтому специфики не знаю. Мы на лентах только бекапы хранили, и то это было 15 лет назад.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #40077236
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще один подводный камень с партициями.
Нужно сделать массовую загрузку данных в несколько свободных партиций, а для этого нужно отключить все индексы кроме кластреного (для скорости)
И вот что получается - ребилд по партициям можно сделать , а Disable уже нет только для всего индекса
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/alter-index-transact-sql?view=sql-server-ver15

У microsoft формально есть решение с 2005 года, типа грузите в стейдж таблицу, там ребилд индексов а далее переключите ее в партицию
https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2005/administrator/cc966380(v=technet.10)
т.е. если еще нужно констрейнты по диапазонам ставить то уже эта акробатика напрягает. Вроде бы партиции специально придумали для изолированной работы с партициями , но по факту без stage таблиц ничего не живет. Сразу захотелось поизучать как дела у Oracle с этим, по опыту использования там всегда продуманней механизмы были
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #40077309
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кесарь
Это универсальный совет или только для случая ленточных баз?
Это совет для тех случаев, когда использование секционирования не помогает решить задачу, а секционированные представления помогают. Только лишь совет не забывать про секционированные представления.
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #40077345
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selis76,

Вообще-то все "некурильщики" загружают в отдельные пустые таблицы, которые потом получают нужные индексы и переключаются в основную таблицу. Если лень пересоздавать кластерный индекс, то можно направить в таблицу уже отсортированный поток
...
Рейтинг: 0 / 0
Партицирование с возможностью убрать партицию в архив
    #40077346
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик
Вообще-то все "некурильщики" загружают в отдельные пустые таблицы, которые потом получают нужные индексы и переключаются в основную таблицу.
selis76 и пишет, что так делает, но удобнее было бы иметь возможность работать непосредственно с секцией, и я с этим полностью согласен.
...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Партицирование с возможностью убрать партицию в архив
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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