|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
aleks222 Весь скрипт: Код: sql 1.
Делал так на несекционированных логах, когда их по чуть-чуть переносил в архив. Работало вполне нормально на довольно большом объеме. Но у меня операция выполнялось редко и только во время минимальной активности пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 15:18 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
selis76 но как я понимаю bcp индексы не сохраняет потом их ребилдить отдельно - неудобно, но решаемо То есть bcp в таблицу-кучу, потом строю кластерный индекс, потом переключаю секцию. Критик Делал так на несекционированных логах, когда их по чуть-чуть переносил в архив. Работало вполне нормально на довольно большом объеме. А так то да, если можно просто удалить, чего зря городить код? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 18:42 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
alexeyvg selis76 но как я понимаю bcp индексы не сохраняет потом их ребилдить отдельно - неудобно, но решаемо То есть bcp в таблицу-кучу, потом строю кластерный индекс, потом переключаю секцию. .... ? А как боролись с объемом файлов данных которые порождает BCP - ? клали в папки типа Compressed folders? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 13:15 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
selis76 alexeyvg пропущено... Я же в секции загружал. Как описал выше. То есть bcp в таблицу-кучу, потом строю кластерный индекс, потом переключаю секцию. .... ? А как боролись с объемом файлов данных которые порождает BCP - ? клали в папки типа Compressed folders? Потом, перед копированием, коненчно, сжимал. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 13:56 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
Интересно, а так - будет работать: 1. Создаем таблицу в другой БД. 2. Создаем к ней алиас в основной БД 3. Переименовываем таблицу в основной базе. 4. Создаем view в основной базе, и называем его как таблицу в основной базе: Select * from таблица_в_основной_базе Where ключ_по_которому_разрезана_таблица between всё_что_относится_к_основной_таблице union all Select * from алиас Where ключ_по_которому_разрезана_таблица between всё_что_относится_к_архивной_таблице И в дальнейшем везде оперируем только view. Ну и, собственно, загрузка старых данных - это bcp в рядомстоящую таблицу в архивной базе, а потом alter table switch. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 07:48 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
uaggster Интересно, а так - будет работать: 1. Создаем таблицу в другой БД. 2. Создаем к ней алиас в основной БД 3. Переименовываем таблицу в основной базе. 4. Создаем view в основной базе, и называем его как таблицу в основной базе: Select * from таблица_в_основной_базе Where ключ_по_которому_разрезана_таблица between всё_что_относится_к_основной_таблице union all Select * from алиас Where ключ_по_которому_разрезана_таблица between всё_что_относится_к_архивной_таблице И в дальнейшем везде оперируем только view. Ну и, собственно, загрузка старых данных - это bcp в рядомстоящую таблицу в архивной базе, а потом alter table switch. Сиквел на это специально рассчитан, такая вьюха называется "Секционированное представление" (на разных серверах "Распределённое секционированное представление"), и сервер оптимизирует обращения к отдельным его "частям". После появления секционирования этим представлениям стали меньше уделять внимания, но раньше это был единственный способ секционирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 10:47 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
Подскажите пожалуйста способы наиболее эффективного бэкапа для партицированных таблиц, которые используют файловые группы в циклическом режиме Т.е. заниматься частым архивированием только активной партиции + иметь возможность 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 13:43 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
selis76 Подскажите пожалуйста способы наиболее эффективного бэкапа для партицированных таблиц, которые используют файловые группы в циклическом режиме Т.е. заниматься частым архивированием только активной партиции ... Я понял что можно переводить в режим read only только файловые группы и архивировать именно файловые группы, но я не вижу команд для архивирования просто партиций . Просто при циклическом переключении файловых групп неудобно их переводить в Read only и обратно (нужно следить скриптом) SQL Server 2019 Без отдельных файловых групп никак. Сиквел не имеет функциональности (как и любые другие СУБД) делать бакап и рестор отдельных секторов в файле базы данных. selis76 + иметь возможность truncate данные одной партиции и восстановить ее без манипуляций со switch "Восстановить" нельзя, т.к. нельзя бакапить и рестроить отдельные сектора в файле БД, как я уже говорил. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 14:36 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
alexeyvg "Восстановить" нельзя, т.к. нельзя бакапить и рестроить отдельные сектора в файле БД , как я уже говорил. для полноты картины, можно восстанавливать страницы файла Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 14:42 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
komrad alexeyvg"Восстановить" нельзя, т.к. нельзя бакапить и рестроить отдельные сектора в файле БД , как я уже говорил. для полноты картины, можно восстанавливать страницы файлаНе, ну это ковыряние ручками, а не бакап-рестор. Тут команда называется "RESTORE DATABASE", да, но при этом но не является рестором базы (или её части) из бакапа... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 14:49 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
alexeyvg Под архивированием вы подразумеваете бакап? Без отдельных файловых групп никак. Да именно бэкап. База является буфером который наполняется последовательно , и поэтому хотелось сократить время резервного копирования + иметь возможность оперативно убирать \восстанавливать старые партиции. Но видимо придется делать обычную схему - полный бэкап раз в неделю + инкрементальный + дневной бэкап логов. А с архивными партициями управляться через BCP , конечно неудобно что в MS SQL нет удобного механизма подключения и отключения архивных партиций а только через BCP + Switch . ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 16:19 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
selis76, подумайте над архитектурой вашего ПО, к примеру, если уйти от хранения xml в СУБД, то и куча ваших проблем также исчезнет ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 16:35 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
selis76, наиболее эффективный путь - это перенос "секций" в отдельную базу + секционированное представление. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2021, 16:41 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
selis76 alexeyvg Под архивированием вы подразумеваете бакап? Без отдельных файловых групп никак. Да именно бэкап. База является буфером который наполняется последовательно , и поэтому хотелось сократить время резервного копирования + иметь возможность оперативно убирать \восстанавливать старые партиции. Но видимо придется делать обычную схему - полный бэкап раз в неделю + инкрементальный + дневной бэкап логов. А с архивными партициями управляться через BCP , конечно неудобно что в MS SQL нет удобного механизма подключения и отключения архивных партиций а только через BCP + Switch . посмотрите тут Partial Backups ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 08:56 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
Надо сказать 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 22:18 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
selis76 для switch in приходится городить констрейнт Но всё равно же быстрее, чем вставка/удаление обычными insert delete. selis76 Получается если чтото историческое хочешь отправить в архив проще Намного производительней, проще, гибче, и надёжней. Притом всё это несравнимо, не "чуть чуть" Но с партициями тоже можно кое как работать, если приноровиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 22:49 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
selis76, зачем гонять из архива секции, я выше написал магические слова - "секционированное представление". Достаточно изменить представление, чтобы архив стал доступен. Читаете, но не видите... И Алексей об этом же пишет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2021, 23:28 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
Владислав Колосов selis76, зачем гонять из архива секции, я выше написал магические слова - "секционированное представление". Достаточно изменить представление, чтобы архив стал доступен. Читаете, но не видите... И Алексей об этом же пишет. Я читал про секционированное представление, но для себя решил пока его не использовать по 3м причинам 1) Чтобы соединить два набора данных (архивная + актуальная таблицы) и это будет View с union причем таблиц из разных баз одного инстанса . Т.е. для оптимизатора это будут по сути разные таблицы с разными индесами (даже если там все логически одинаково) и он наверняка будет всегда делать поиск по обоим всегда. 2) Мне может понадобится восстановить более чем один диапазон из архива из разных бэкапов. 3) У меня много запросов с разными комбинациями условий и join + чтобы избежать обращения ко всем партициям (известная особенность) приходится везде ставить условие на основное поле партицированного индекса MsgCounter. Учитывая это решил, что заставлять оптимизатор Microsoft работать правильно сложнее чем загнать архивные данные через insert если нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 14:14 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
selis76, а что мешает вам сделать два представления, для архива и для текущей базы? А уже потом соединят их результаты так или иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 14:18 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
selis76, Похожая проблема на oltp базе. Пока что делаю топорно пару раз в год: - создаю новую пустую таблицу (в некоторых случаях переливаю часть данных, создаю индексы, синхронизтрую последние записи) - переименовываю обе, чтобы вставки шли в новую - копирую старую в архив и удаляю Это работает, так как данные в этих таблицах не меняются. Партиционированные виды не применяю, т.к. не выполнить условие по PK. Партиционированные таблицы (скользящее оконо) не применяю, так как: таблица периодически меняется, в случае ошибки с организацией скользящего окна ляжет приложение т.е. что бы что то изменить, нужен человек с опытом, нужно тестировать - т.е. затраты времени на небольшую сервисную функцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 15:02 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
selis76 1) Чтобы соединить два набора данных (архивная + актуальная таблицы) и это будет View с union причем таблиц из разных баз одного инстанса . Т.е. для оптимизатора это будут по сути разные таблицы с разными индесами (даже если там все логически одинаково) и он наверняка будет всегда делать поиск по обоим всегда selis76 2) Мне может понадобится восстановить более чем один диапазон из архива из разных бэкапов. Вы можете иметь произвольное количество архивных копий, и подсоединять их, модифицируя само представление. Можете включить один архив в представление/ можете все сразу, варианты ограничены только вашей фантазией и железом. Например, у вас есть база с транзакциями за активный период, и базы за прошедшие месяцы. Архивные базы хранятся на ленте. Вы копируете с ленты баз за феврали с 2001 по 2010 год, потом оп - за 1 мс меняется представление ,у вас доступны активный период, плюс феврали за 10 лет. С секционировнаной таблицей для того же самого нужно будет дополнительно восстанавливать бакапы, плюс делать чек констрэйн. Присоединять секции снаружи там нельзя, чек-констрейн оно тоже почему то не сохраняет при отоединении. selis76 Учитывая это решил, что заставлять оптимизатор Microsoft работать правильно сложнее чем загнать архивные данные через insert если нужно. Кроме того, не преувеличивайте негативные последствия обращения ко всем секциям, там накладные расходы проявляются только для огромного потока сверх-лёгких обращений. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 17:56 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
alexeyvg, я правильно понял, что вы предлагает менять код на проде в онлайн режиме, так сказать? Это универсальный совет или только для случая ленточных баз? С ними я дела не имел, поэтому специфики не знаю. Мы на лентах только бекапы хранили, и то это было 15 лет назад. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2021, 11:30 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
Еще один подводный камень с партициями. Нужно сделать массовую загрузку данных в несколько свободных партиций, а для этого нужно отключить все индексы кроме кластреного (для скорости) И вот что получается - ребилд по партициям можно сделать , а 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 с этим, по опыту использования там всегда продуманней механизмы были ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2021, 15:48 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
Кесарь Это универсальный совет или только для случая ленточных баз? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2021, 23:07 |
|
Партицирование с возможностью убрать партицию в архив
|
|||
---|---|---|---|
#18+
selis76, Вообще-то все "некурильщики" загружают в отдельные пустые таблицы, которые потом получают нужные индексы и переключаются в основную таблицу. Если лень пересоздавать кластерный индекс, то можно направить в таблицу уже отсортированный поток ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2021, 13:33 |
|
|
start [/forum/topic.php?fid=46&msg=39960547&tid=1684604]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 335ms |
total: | 494ms |
0 / 0 |