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

23.07.19

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Последовательный и паралельный бэкап баз в MS SQL скриптами:
.7z 4,94Kb
6
6 Скачать (1 SM) Купить за 1 850 руб.

В архиве 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 параллельный бэкап последовательный

См. также

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

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

6000 руб.

06.11.2012    72788    625    45    

84

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

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

1200 руб.

03.09.2014    15705    21    6    

27

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

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

04.12.2023    9426    n_mezentsev    15    

27

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

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

07.10.2022    28599    sapervodichka    37    

147

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

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

1 стартмани

25.08.2022    5732    3    Gnom-Gluck    6    

7

Архивирование (backup) Системный администратор Программист Платформа 1С v8.3 Абонемент ($m)

Небольшая утилита для копирования файловых баз данных 1С.

1 стартмани

02.06.2022    4689    3    Giblarium    12    

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

А вот по поводу - перед бекапом или после - я бы поспорил
Если что то пойдет не так - бекап будет только предыдущий
А так - сделал бекап - делай с базой все что хочешь нужно
8. webester 26 28.02.19 17:09 Сейчас в теме
(2) Это штатные механизмы обслуживания базы, которые сами данные по факту абсолютно не трогают. Если делать бекап до обслуживания у базы с полной моделью восстановления то при восстановлении будем поднимать еще и огоромный лог который делает обслуживание индексов. То есть время поднятия базы можно легко увеличить раза так в 4. Если вы хотя бы раз в неделю поднимаете в тестовую базу из копии размером гигов 50-200 это будет немного напрягать. Ну как немного...
CyberMuesli; +1 Ответить
10. capitan 2507 01.03.19 09:27 Сейчас в теме
(8)Я бы не сказал что перестроение индекса не трогает данные особенно кластерного.
И я видел когда такие моменты совпадали с приходом кирдыка по железу например.
Например файл бд переехал на сбойный сектор
И все амба и каюк, бекапа уже не будет
12. DonAlPatino 178 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 178 15.04.19 09:50 Сейчас в теме
(18) если уж нужен короткий RTO, то может просто always on и не мучаемся?
By the way - уж коль мы дошли до логов - нигде не нашел ответа на вопрос (возможно плохо искал), что у нас происходит с фрагментацией индексов после бэкапа transaction log в full mode?
20. DonAlPatino 178 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 178 16.04.19 10:41 Сейчас в теме
(22) Дык работа у нас такая :-) Я, к слову, с (8) абсолютно согласен. т.к. главный потребитель бэкапов - это отдел разработки. И dev сервера prod'у ни чета по ресурсам :-(
3. DonAlPatino 178 28.02.19 11:31 Сейчас в теме
(1)"перестроить индекс", который автоматически обновляет статистику не подходит? Тогда что имеется в виду?
4. capitan 2507 28.02.19 13:13 Сейчас в теме
(3)Слышали бы вы как MVP Microsoft костерил людей которые вместо пересчета статистики перестраивают индексы.
Если вкратце - физически изнашиваете свой диск
5. DonAlPatino 178 28.02.19 14:52 Сейчас в теме
(4) у меня в планах смотреть фрагментированность индексов и в зависимости от этого делать rebuild/reorg/nothing :-). Сделаю - сделаю и обновление статистики. Вопрос не получиться ли дольше по времени...
Ну и как "MVP Microsoft костерил" разработчиков и архитекторов 1С платформы на предмет "они до сих пор не используют все возможности SQL 2008", например, я тоже слышал. И не раз.
6. capitan 2507 28.02.19 14:54 Сейчас в теме
(5)Вы найдите в ИТС методичку, а статистика очень быстро обновляется даже на 200 Гб
7. DonAlPatino 178 28.02.19 15:08 Сейчас в теме
(6)Я не про статистику, а про анализ фрагментированности индексов и rebuild/reorg/nothing в зависимости от степени.
11. a.doroshkevich 1496 01.03.19 11:46 Сейчас в теме
13. DonAlPatino 178 01.03.19 12:52 Сейчас в теме
(11) Оно у меня в закладках и активно используется. Или там есть про запуск параллельных задач, а я пропустил?
14. a.doroshkevich 1496 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 178 14.04.19 11:39 Сейчас в теме
(16) "Совершенно не понял, зачем писать параллельный скрипт, если стандартное задание backup database уже бэкапирует базы параллельно. " 10 баз бэкапиться параллельно в 10 потоков? Серьезно?
"Судя по скриншотам с затертыми именами баз данных, в заданиях вместо опции «Все базы данных» перечисляются конкретные базы. Из-за непонимания важности обслуживания всех баз данных по единому плану и вытекает данное неудобство и предлагаемое автором решение." У меня там 40 баз, списанных в архив. Мне их тоже каждую ночь переиндексировать и бэкапить? Серьезно?
"Кроме того, предлагаемый план обслуживания непрофессиональный, и автора совершенно справедливо отправляли в ИТС. " Конкретные претензии можно? А то на ничем не мотивированный наезд похоже...
"Но раз уж главной темой статьи является параллельность, то сделаем акцент именно на ней. Автор озабочен параллельностью одной единственной задачи (которая на самом деле параллельна штатно), а сам связывает последовательным выполнением, задачи плана обслуживания, которые могут выполняться параллельно. " Вы, простите скрипт смотрели или "чукча не читатель - чукча писатель?"
Отдельно можно вопрос - а параллельностью какой конкретно "одной единственной задачи" озабочен автор? А то он, к сожалению, не в курсе...
19. webester 26 14.04.19 16:51 Сейчас в теме
(16)
В заданиях плана обслуживания не должно быть явного перечисления баз.

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