Последовательный и параллельный бэкап баз в MS SQL скриптами

23.07.19

База данных - Архивирование (backup)

На картинке старый добрый Maintaince Plan. Работает давно и надежно. Но вот при 30 активных и столько же архивных базах каждое изменение - это много щелканий мышкой и сохранений. А хочется просто исправить список баз в одном месте, и все. В процессе переписывания Maintaince Plan в скрипт возникла идея попробовать обрабатывать базы параллельно. В конце концов, зачем была потрачена куча денег на "ядра, кэш и прочий треш"?

Скачать исходный код

Наименование Файл Версия Размер
Последовательный и паралельный бэкап баз в MS SQL скриптами:
.7z 4,94Kb
6
.7z 4,94Kb 6 Скачать

В архиве 2 скрипта. Оба реализуют стандартный комплект действий над списком баз:

  1. проверить целостность
  2. перестроить индекс
  3. очистить процедурный кэш
  4. [NEW] обрезать transaction log
  5. с архивировать
  6. удалить старые архивы

В случае ошибок - послать уведомление на почту администраторам

  • serial.sql - выполняет комплект последовательно база за базой
  • parallel.sql - пытается выполнить весь комплект параллельно

В результате на малой продуктовом сервере (8 virtual proc Xeon E5-2650v2 2.60 и SSD raid) c 15 базами общим объемом 50Gb получили:

  • serial.sql - 13:51 минута
  • parallel.sql - 4:22 минуты

Итого быстрее в 3 раза.

технически parallel.sql создает отдельные job для каждой базы и сразу их стартует.

Если кто подскажет идею, как сделать по другому - буду очень благодарен. Т.к. при таком режиме управлять количеством реально запущенных задач не получается.И какая там "параллельность выполнения" сказать тяжело.

[UPD.23/07/2019]

Дошли руки поправить скрипты:

  • расширена обработка ошибок (не валимся если база в offline mode например)
  • включена возможность бэкапа transaction log

на основном продуктовом сервер с тремя базами общим объемом 150 gb получили:

  • serial.sql - 57 минут
  • parallel.sql - 28 минут

Ускорение в 2 раза.

PS теперь надо сделать предварительную проверку дефрагментации индексов и делать rebuild/reorg только тем что нужно. Ну и некоторые таблицы вообще не трогать.

[ВАЖНО] Паралельный бэкап на тестовом сервере с 15K дисками и 30 базами объемом в 200Gb поставил сервер колом до окончания процесса. Поэтому на боевых серверах надо быть аккуратным. Во избежании

Подключение: 1 step в обычном job куда вводиться текст скрипта:

 

MS SQL Maintaince Plan параллельный бэкап последовательный

См. также

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

Архивирование (backup) Журнал регистрации Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

21600 руб.

15.05.2017    42647    10    24    

38

BackUPv8 - система резервного копирования баз 1С

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Автоматическое создание копий файловых и серверных информационных баз 1С Предприятие 8 и размещение копий в облаке Яндекс.Диск, локальном или сетевом ресурсе.

1200 руб.

03.09.2014    14835    15    6    

18

Автоматическое резервное копирование любой клиент-серверной базы 1С в формате DT с удалением сеансов, архивацией, изменением расширения (8.3.14+, расширение)

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней.

6000 руб.

06.11.2012    70234    622    44    

80

Резервное копирование журнала транзакций, наконец-то!

Архивирование (backup) Администрирование СУБД Россия Бесплатно (free)

Постараюсь объяснить, зачем нужно резервное копирование именно журнала транзакций, а не только базы данных, и почему я словно сбросил груз, настроив его - как, покажу, естественно. Кстати, будут скрипты T-SQL (с подробными комментариями) - отличный способ сделать администрирование базы более уютным.

04.12.2023    6279    n_mezentsev    15    

26

Резервное копирование и восстановление 1С баз на PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной инструкции будет описано, как с помощью pgAdmin, bat-файлов и планировщика заданий Windows организовать резервное копирование, восстановление и хранение копий баз данных.

07.10.2022    20566    sapervodichka    36    

143

Архивирование базы в dt и дамп postgres

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Захотелось клиентам выгрузку архива баз, и выгрузку в дт, готовые скрипты с сети не заработали. Может, кому-то поможет. Релиз 8.3.18.1741.

1 стартмани

25.08.2022    4812    2    Gnom-Gluck    6    

7
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. webester 26 28.02.19 02:47 Сейчас в теме
>>Оба реализуют стандартный комплект действий над списком баз
А где статистика, индексы? Эти действия как раз, надо делать перед бекапом.
2. capitan 2472 28.02.19 09:56 Сейчас в теме
Согласен с предыдущим оратором.
Как минимум иллюстрация того что ИТС читать все же нужно.
(1)
делать перед бекапом

А вот по поводу - перед бекапом или после - я бы поспорил
Если что то пойдет не так - бекап будет только предыдущий
А так - сделал бекап - делай с базой все что хочешь нужно
8. webester 26 28.02.19 17:09 Сейчас в теме
(2) Это штатные механизмы обслуживания базы, которые сами данные по факту абсолютно не трогают. Если делать бекап до обслуживания у базы с полной моделью восстановления то при восстановлении будем поднимать еще и огоромный лог который делает обслуживание индексов. То есть время поднятия базы можно легко увеличить раза так в 4. Если вы хотя бы раз в неделю поднимаете в тестовую базу из копии размером гигов 50-200 это будет немного напрягать. Ну как немного...
CyberMuesli; +1 Ответить
10. capitan 2472 01.03.19 09:27 Сейчас в теме
(8)Я бы не сказал что перестроение индекса не трогает данные особенно кластерного.
И я видел когда такие моменты совпадали с приходом кирдыка по железу например.
Например файл бд переехал на сбойный сектор
И все амба и каюк, бекапа уже не будет
12. DonAlPatino 176 01.03.19 12:50 Сейчас в теме
(10) Ну такой кирдык по железу ( в отсутствии резервирования) может придти и без перестроения индекса, а прост о во время работы....
15. webester 26 09.03.19 09:44 Сейчас в теме
(10)Давай попробуем максимально натянуть сову на глобус. Например БД куда-то едет без бекапов. Ситуация конечно технически возможна. Но проблема не в обслуживании в данном случае.
18. CyberMuesli 14.04.19 13:01 Сейчас в теме
(8)

Браво, коллега, вы понимаете очень тонкий момент. Обслуживание индексов фиксируется в логах, и это громадный объем операций. Тянуть это в бэкап логов и в дифбэкапы нет никаких резонов.

Но на время восстановления это не должно повлиять при грамотной организации схемы бэкапирования. Дело в том, что если мы соблюдаем RTO, было бы неправильно восстанавливать базу к моменту сбоя исключительно по логам, иначе мы можем и не успеть, вне зависимости от того, придется ли при восстановлении проходить по логам операции обслуживания индексов или нет. Поэтому для соблюдения RTO за базой неотступно следуют дополнительные опорные точки в виде короткоживущиех дифбэкапов, а с помощью логов восстанавливается только последний хвостик. Именно с помощью последнего дифбэкапа мы и перепрыгнем регламентные операции. Поэтому время восстановления существенно не изменится. В то время как при восстановлении только по логам, время действительно может возрасти кратно.

Но есть и другие причины,

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

2. Дифбэкапы станут большими. Если их нет, или они короткоживущие и создаются только с целью снизить RTO, данное обстоятельство можно игнорировать. Но схема бэкапирования может предусматривать создание ежедневных дифбэкапов вместо полных. И тогда сильно возрастают накладные расходы на их хранение, а вопросы «до или после» и «с какой периодичностью» начинают имеет существенное значение.
21. DonAlPatino 176 15.04.19 09:50 Сейчас в теме
(18) если уж нужен короткий RTO, то может просто always on и не мучаемся?
By the way - уж коль мы дошли до логов - нигде не нашел ответа на вопрос (возможно плохо искал), что у нас происходит с фрагментацией индексов после бэкапа transaction log в full mode?
20. DonAlPatino 176 15.04.19 09:46 Сейчас в теме
(8) Сделать backup transaction log'ов перед full backup, чтобы их обрезать? Грязновато - зато в Full backup останутся "чистые" данные без лога?
22. webester 26 16.04.19 10:22 Сейчас в теме
(20)(18)Давайте еще вприсядку станцуем для полноты картины, вместо того, чтобы просто поменять порядок действий.
23. DonAlPatino 176 16.04.19 10:41 Сейчас в теме
(22) Дык работа у нас такая :-) Я, к слову, с (8) абсолютно согласен. т.к. главный потребитель бэкапов - это отдел разработки. И dev сервера prod'у ни чета по ресурсам :-(
3. DonAlPatino 176 28.02.19 11:31 Сейчас в теме
(1)"перестроить индекс", который автоматически обновляет статистику не подходит? Тогда что имеется в виду?
4. capitan 2472 28.02.19 13:13 Сейчас в теме
(3)Слышали бы вы как MVP Microsoft костерил людей которые вместо пересчета статистики перестраивают индексы.
Если вкратце - физически изнашиваете свой диск
5. DonAlPatino 176 28.02.19 14:52 Сейчас в теме
(4) у меня в планах смотреть фрагментированность индексов и в зависимости от этого делать rebuild/reorg/nothing :-). Сделаю - сделаю и обновление статистики. Вопрос не получиться ли дольше по времени...
Ну и как "MVP Microsoft костерил" разработчиков и архитекторов 1С платформы на предмет "они до сих пор не используют все возможности SQL 2008", например, я тоже слышал. И не раз.
6. capitan 2472 28.02.19 14:54 Сейчас в теме
(5)Вы найдите в ИТС методичку, а статистика очень быстро обновляется даже на 200 Гб
7. DonAlPatino 176 28.02.19 15:08 Сейчас в теме
(6)Я не про статистику, а про анализ фрагментированности индексов и rebuild/reorg/nothing в зависимости от степени.
11. a.doroshkevich 1412 01.03.19 11:46 Сейчас в теме
13. DonAlPatino 176 01.03.19 12:52 Сейчас в теме
(11) Оно у меня в закладках и активно используется. Или там есть про запуск параллельных задач, а я пропустил?
14. a.doroshkevich 1412 03.03.19 13:54 Сейчас в теме
(13)там про анализ фрагментированности
24. itoptimum 24 12.05.20 14:03 Сейчас в теме
(13) там все есть. *DatabasesInParallel='Y'
9. webester 26 28.02.19 17:10 Сейчас в теме
(3)Действительно. Смотрю в книгу вижу фигу.
16. CyberMuesli 14.04.19 09:30 Сейчас в теме
Совершенно не понял, зачем писать параллельный скрипт, если стандартное задание backup database уже бэкапирует базы параллельно.

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

Судя по скриншотам с затертыми именами баз данных, в заданиях вместо опции «Все базы данных» перечисляются конкретные базы. Из-за непонимания важности обслуживания всех баз данных по единому плану и вытекает данное неудобство и предлагаемое автором решение.

Разделение баз на те, которые бэкапируются, и на какие-то другие — серьезная методологическая ошибка. В заданиях плана обслуживания не должно быть явного перечисления баз. Только «все базы» + игнор оффлайновых и не иначе. При этом они бэкапятся параллельно сервером sql без всяких самодельных скриптов, а добавление новых баз не требует изменений в плане обслуживания.

Кроме того, предлагаемый план обслуживания непрофессиональный, и автора совершенно справедливо отправляли в ИТС.

Но раз уж главной темой статьи является параллельность, то сделаем акцент именно на ней. Автор озабочен параллельностью одной единственной задачи (которая на самом деле параллельна штатно), а сам связывает последовательным выполнением, задачи плана обслуживания, которые могут выполняться параллельно.

Потому кроме ИТС, посылаем автора в мануал администратора SQL
17. DonAlPatino 176 14.04.19 11:39 Сейчас в теме
(16) "Совершенно не понял, зачем писать параллельный скрипт, если стандартное задание backup database уже бэкапирует базы параллельно. " 10 баз бэкапиться параллельно в 10 потоков? Серьезно?
"Судя по скриншотам с затертыми именами баз данных, в заданиях вместо опции «Все базы данных» перечисляются конкретные базы. Из-за непонимания важности обслуживания всех баз данных по единому плану и вытекает данное неудобство и предлагаемое автором решение." У меня там 40 баз, списанных в архив. Мне их тоже каждую ночь переиндексировать и бэкапить? Серьезно?
"Кроме того, предлагаемый план обслуживания непрофессиональный, и автора совершенно справедливо отправляли в ИТС. " Конкретные претензии можно? А то на ничем не мотивированный наезд похоже...
"Но раз уж главной темой статьи является параллельность, то сделаем акцент именно на ней. Автор озабочен параллельностью одной единственной задачи (которая на самом деле параллельна штатно), а сам связывает последовательным выполнением, задачи плана обслуживания, которые могут выполняться параллельно. " Вы, простите скрипт смотрели или "чукча не читатель - чукча писатель?"
Отдельно можно вопрос - а параллельностью какой конкретно "одной единственной задачи" озабочен автор? А то он, к сожалению, не в курсе...
19. webester 26 14.04.19 16:51 Сейчас в теме
(16)
В заданиях плана обслуживания не должно быть явного перечисления баз.

Расскажите, что делать с тестовыми базами? Их тоже обслуживать и бекапить?
Оставьте свое сообщение