Копия базы 1С для отчетов. Или как выжить с тяжелой отчетностью

0. YPermitin 9061 22.04.19 00:29 Сейчас в теме
Способы создания копии базы 1С для отчетов. Бэкапирование, репликация, AlwaysOn и другие страшные слова.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. 3vs 22.04.19 07:17 Сейчас в теме
Юрий, а ежели, продолжая разговор из "Самый быстрый шринк на Диком Западе",
infostart.ru/public/1031815/
рассмотреть вариант со сливанием фрагментированной базы в пустой дисковый массив с одновременной дефрагментацией файлов базы,
можно получить OLTP свежую базу и "грязную" OLAP базу, которая, правда, не наполняется свежими данными, но вполне себе, доступна для отчётов, не накончиках пальцев, конечно, но всё же, а потом грязный дисковый массив можно отформатировать для очередной "рокировочки" (© Ельцин Б.Н.)?
YPermitin; +1 Ответить
2. YPermitin 9061 22.04.19 07:36 Сейчас в теме
(1) надо эксперементировать, как я и раньше говорил :)

Но что-то мне подсказывает, что проблем можно больше огрести.
3. ellavs 718 22.04.19 07:58 Сейчас в теме
Спасибо за систематизацию способов. Мы сами используем классику вручную. У нас на будущее ("на будущее" просто потому что мне некогда этим заняться) висит такая задачка: периодическое поднятие копии базы (через бэкап на MS SQL), затем копия должна понимать, что она копия - соответственно останавливать выполнение регламентных заданий и в заголовках прописывать, что она копия. Плюс копия должна поднимать полномочия определенных пользователей, которым разрешено "баловаться" в копии базы. Скорее всего нужно сделать обработку, которая должна запускаться после восстановления бэкапа...
rpgshnik; YPermitin; +2 Ответить
4. YPermitin 9061 22.04.19 08:10 Сейчас в теме
(3) Спасибо!

Там вроде не долго сделать с помощью SQL-скриптов копирование базы, а в самих конфигурациях есть типовой функцинал БСП, который позволит заблокировать регл. задания.

Остальное, да. Это уже свои инструменьы и скрипты "допилить".
5. baklanov_i 22.04.19 09:19 Сейчас в теме
(4) Блокировка заданий находится в свойствах базы на сервере 1с, разве нет?
6. YPermitin 9061 22.04.19 09:23 Сейчас в теме
(5) В БСП есть событие, которое вызывается при старте любого регламентного задания. Там проверяется является ли база тестовая или копия и в случае чего задание останавливается.

Для самописных если это событие вызывается, то проверка тоже сработает.

А так да, на сервере можно запретить в свойствах информационной базы.
25. rpgshnik 2217 23.04.19 04:57 Сейчас в теме
(3) я бы почитал такую статью как это сделать :)
32. ellavs 718 23.04.19 16:47 Сейчас в теме
(25) если получится такое реализовать, постараюсь написать :)
7. starik-2005 2180 22.04.19 09:56 Сейчас в теме
Не благодарите
https://docs.microsoft.com/ru-ru/sql/relational-databases/replication/snapshot-replication?view=sql-server-2017

ЗЫ: уже миллион раз говорил, что если кто хочет повысить скорость работы системы - пусть разделит OLAP и OLTP.
MaZaHacKa_13; acanta; YPermitin; +3 Ответить
8. YPermitin 9061 22.04.19 10:32 Сейчас в теме
(7) спасибо за комментарий, но в статье же сказано про жиу репликацию.

Снапшоты не самое производительное решение.
9. starik-2005 2180 22.04.19 10:36 Сейчас в теме
(8)
Снапшоты не самое производительное решение.
Создание моментального ридонли-снимка у меня занимало 7 секунд на базе в 200 гигов, так шта не знаю - не знаю...

В постгресе вообще можно так:
CRE ATE    DATABASE MyDBCopy WITH TEMPLATE MyDB
YPermitin; +1 Ответить
10. YPermitin 9061 22.04.19 10:42 Сейчас в теме
(9) посмотрите описание репликации снимков по той ссылке, которую сами оставили.

Репликация транзакций лучшее решение для таких случаев. Но для 1С...
11. starik-2005 2180 22.04.19 11:03 Сейчас в теме
(10) репликация снимков не нужна - достаточно снимка. Побороть ридонли вполне можно - достаточно поменять конфу так., чтобы она ничего не писала при внешнем соединении, а там уже веб-сервис и таскание туда-сюда сериализованных схем компоновки, расшифровок и табличных документов. Я делал бесшовный механизм формирования отчетов из снапшота - отличное решение, которое снизило загрузку SQL сервера с 80% до 30% только лишь на гребанных блокировках.
mickey.1cx; YPermitin; +2 Ответить
12. YPermitin 9061 22.04.19 11:54 Сейчас в теме
(11) теперь я понял о чем Вы говорите!

Моментальные снимки, действительно, нето же самое, что и репликация снапшотами. Сами снимки тоже формируются быстро, зависит от объема измененных данных.

Но.... у них ведь есть ряд существенных ограничений. Самые критичные на мой взгляд:
1. Снимок находится в дополнительной базе данных НА ТОМ ЖЕ инстансе SQL Server.
2. При наличии снимков мы не смодем в случае аварии быстро восстановить базу ни из журналов, ни из полных бэкапов.
3. Снижение производительности, которое будет проявляться на нагруженных системах, т.к. снимки нужно будет поддерживать.

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

Тем более обязательное соседство на одном сервере с рабочей базой сводит на нет выйгрыш для OLAP, т.к. ресурсы рабочего окружения тяжелые отчеты будут "съедать".

Может подходит для небольших OLTP-баз. Но так как для моментальных снимков нужна еще и редакция Enterprise, то стоит ли ее для них использовать.
13. starik-2005 2180 22.04.19 12:05 Сейчас в теме
(12)
Может подходит для небольших OLTP-баз. Но так как для моментальных снимков нужна еще и редакция Enterprise, то стоит ли ее для них использовать.
Я выше уже написал, но повторюсь: снапшот дал выигрыш в производительности на базе размером 150-350 ГиБ, снизив нагрузку на сервер с 80% до 30% за счет того, что система перестала ждать на блокировках при вычитывании большого количества данных для формирования отчетов. Знаете, как организованы блокировки? Это некий цикл на проверку доступности ресурса, сделанный на С/Асме. Он кушает ресурсы сервера будь здоров. А нет блокировок - нет съедаемых ресурсов.
acanta; YPermitin; +2 Ответить
14. YPermitin 9061 22.04.19 12:09 Сейчас в теме
(13) я с Вами не спорю, но цифры лучше чем- то подтверждать.

Размер базы это не показатель, также как и общие цифры по нагрузке. Какая нагрузка, от чего? А как же общий пул буфферного кэша на обе базы?

Что такое блокировки я немного догадываюсь :)

Вообщем, не зная что там были за изначальные улсловия трудно что-либо обсуждать.
15. starik-2005 2180 22.04.19 12:48 Сейчас в теме
(14)
Какая нагрузка, от чего?
500 юзверей, УТ 11 переработанна и дополненная, Овер 10к документов в день. Как-то так.
YPermitin; +1 Ответить
16. YPermitin 9061 22.04.19 12:58 Сейчас в теме
(15) в комментариях трудно такое обсуждать. Вот доступ бы на сервер :)))

Рад, что Вам эта помогло. Главное результат!
17. starik-2005 2180 22.04.19 12:59 Сейчас в теме
(16) не просто помогло, а повысило доступность системы в разы. Количество дедлоков вообще обнулилось.
YPermitin; +1 Ответить
18. YPermitin 9061 22.04.19 13:01 Сейчас в теме
(17) у вас энтерпрайз. Не пробовали AlwaysOn использовать?

Вторая реплика будет в режиме реалного времени обновляться. Полюс если включить для нее параллелизм, то аналитические отчеты можно ускорить хорошо.
19. starik-2005 2180 22.04.19 13:04 Сейчас в теме
(18) с этим и не спорю, просто нет надобности в постоянной реплике, ибо три раза в день снапшот обновляется. Время создания снапшота - 7 секунд в среднем.
YPermitin; +1 Ответить
20. YPermitin 9061 22.04.19 13:10 Сейчас в теме
28. deminded 7 23.04.19 11:13 Сейчас в теме
(13) Скажите, снятие снапшота требует отключения всех соединений?
Вообще вопрос интересует для Postgres
31. starik-2005 2180 23.04.19 12:56 Сейчас в теме
(28) для мсскула не надо ничего отключать. А для постгреса решается через снапшот файловой системы - там тоже моментально снимок делается. А как его прикрутить к инстансу постгри - думайте сами)))
21. Darklight 22 22.04.19 14:19 Сейчас в теме

Ссылка не работает.


Платформа 1С не поддерживает работу с базой в режиме "Только для чтения", т.к. пытается сохранять различные настройки форм, отчетов, историю работы в служебные таблицы. В этом случае есть несколько решений:

Использовать толстый клиент обычного приложения с некоторыми модификациями конфигурации.
Формировать отчеты через интеграцию (COM-соединение, веб-сервисы, HTTP-сервисы, OData-интерфейс).

Вот про это всё как раз было бы интересно почитать.
YPermitin; +1 Ответить
22. YPermitin 9061 22.04.19 14:24 Сейчас в теме
(21) спасибо, что нашли ошибку.

Ссылку исправил. Продублирую еще и здесь: вот ссылка.
23. Mortum 22.04.19 14:45 Сейчас в теме
А можно использовать transaction log shipping, который проще и не имеет ограничений?
vers139; YPermitin; +2 Ответить
24. YPermitin 9061 22.04.19 14:52 Сейчас в теме
(23) он больше используется для для целей резервного копирования и отказоустойчивости.

Самое главное ограничение - во время синхронизации база будет недоступна. Вернуть ее "к жизни" можно только вручную, ну или скриптами. Но все равно это может быть не очень надежно и не оперативно.

Если есть готовность с эти бороться, то возможность ее использовать есть.
36. vers139 51 30.04.19 12:41 Сейчас в теме
(24) Не согласен. Расписание снятия журнала транзакций, доставки и разворачивания на втором сервере можно настроить. По-умолчанию, каждые 15 минут.

Да, база находится в режиме Только для чтения. Но это также в Вашем варианте.

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

Кстати, настроенные отчёты СКД можно формировать в этой копии и из режима управляемого приложения.
YPermitin; +1 Ответить
37. YPermitin 9061 30.04.19 12:55 Сейчас в теме
(36)
4) Не согласен.


Каждый останется при своем :) Я вижу ограниченное применение, потому что отключение базы может быть критичным. Вы как себе представляете: пользователь формирует отчет, второй, третий и бац ошибка на уровне SQL Server о недоступности базы. Ну смирился он, ладно еще раз запустить. А если пользователей много?

Кому нужна такая работа. И изначальный посыл все же не в закрытом периоде, а просто база для отчетов. А если нужно базу раз в день ночью обновлять, то зачем доставка журналов? Бэкап полностью решает проблему.

Нет ничего лучше AlwaysOn, если есть лицензия Enterprise :)
39. vers139 51 30.04.19 13:28 Сейчас в теме
(37) если отчёт формируется больше 15 минут, то это вопрос или к медленности отчёта, или к пользователю, который пытается объять необъятное.

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

Также преимуществом данного варианта в его простоте, т.е. просто бэкап журнала транзакций (именно журнала транзакций, а не полный бэкап базы), копирование файлов и разворачивание на втором сервере. Подобный алгоритм уже работает у многих администраторов. Здесь же всё можно выполнить, используя мастер действий за 5 минут.
26. Elf1k 53 23.04.19 08:12 Сейчас в теме
Вы забыли упомянуть о новой технологии 1с появившейся в платформе 8.3.14 и выше это технология "Дата акселератор" и "Механизм копий базы данных" так вот в крайней технологии сама платформа 1с ответственна за поддержание копии в актуальном состоянии при помощи метода КопииБазыДанных.Обновить() который можно встроить в любое место в коде конфигурации. А "Дата акселератор" выборочно загружает таблицы базы данных в оперативную память, что при правильном использовании в разы увеличивает скорость формирование отчетов.
PLAstic; YPermitin; +2 Ответить
27. YPermitin 9061 23.04.19 08:19 Сейчас в теме
(26) про дата акселератор читал, но не пользовался.

Честно, пока нет доверия к этим новым решениям. Если удастся посмотреть когда-нибудь, вот тогда можно и написать :)

Если у Вас есть опыт использования, то юыло бы интересно послушать.
Дмитрий74Чел; Elf1k; +2 Ответить
33. Elf1k 53 25.04.19 14:26 Сейчас в теме
(27)
Если есть опыт использования, то юыло бы интересно послушать.

Публикацию сотворил это моя первая так, что не судите строго :) Собрал все данные в небольшую инструкцию и добавил немного своего. https://infostart.ru/public/1053895/
YPermitin; +1 Ответить
34. YPermitin 9061 25.04.19 14:36 Сейчас в теме
(33) прочитал. Плюс поставлю, сейчас ИС заглючил и говорит, что я уже ставил. Далее отпишусь уже в самой статье.

Спасибо за труды!
29. PLAstic 253 23.04.19 12:40 Сейчас в теме
(26) Хотел было дописать тоже, но заметил ваш комментарий. Похоже, 1Сники сделали убийцу данной статьи.

"Реализована возможность размещать во внешней базе данных (относительно базы данных «1С:Предприятия») копии таблиц, использование которых в отчетах или запросах, вызывает повышенную нагрузку на используемую СУБД. Данный механизм поддерживается только при работе в клиент-серверном варианте работы.
Реализована возможность указания, в какой базе данных будет выполняться запрос или отчет.
Источник ."
YPermitin; +1 Ответить
30. YPermitin 9061 23.04.19 12:42 Сейчас в теме
(29) пока это все заявления, неизвестно на сколько стабильно это работает и как быстро. Надо сравнивать с корпоративным софтом, который выполняет те же функции.

Ну и не забываем, что все это дуступно только с оицензией КОРП.
Дмитрий74Чел; +1 Ответить
35. Glebis 11 30.04.19 12:38 Сейчас в теме
А почему никто не предлагает сделать запрос к Read only базе Always On группы используя в СКД внешний источник данных?
YPermitin; +1 Ответить
38. YPermitin 9061 30.04.19 12:57 Сейчас в теме
(35)
d only базе Always On группы используя в СКД внешний источник данных?


Так этот запрос еще надо собрать :) Вариант жизнеспособный, конечно же. Но требует некоторых дополнительных усилий при разработке.
40. Glebis 11 06.05.19 11:10 Сейчас в теме
(38)
Так этот запрос еще надо собрать :) Вариант жизнеспособный, конечно же. Но требует некоторых дополнительных усилий при разработке.
Не понимаю в чем сложность:
Добавить зеркальную базу Always On в любой 1С кластер.
Сначала сделать стандартный отчет на СКД.
Сделать общий модуль, куда бы передавался текст запроса из СКД отчета для выполнения на зеркальной базе.
Переделать Отчет СКД на работу с данными из внешнего источника.

У меня только один вопрос: как выполнить запрос в зеркальной базе? Если через COM объект, то это медленно. Лучше, конечно, сделать запрос на прямую в SQL без регистрации в кластере, но нужно переводить запрос в SQL нотацию с и обратно.
YPermitin; +1 Ответить
41. YPermitin 9061 06.05.19 11:14 Сейчас в теме
(40) я как-раз говорил про сложность сформировать SQLный запрос для обращения к реплике.

Еще вариант, кроме COM-соединения, это использовать веб-сервис, через который отправлять текст запроса, а ответ получать в виде XDTO. Но это все равно медленнее SQL-запроса.
43. 3vs 05.08.19 16:26 Сейчас в теме
(41)Юрий, а ежели использовать под базы системы с ZFS?
Тогда не надо извращений с базой только чтение?

Вот тут выдержка из интересной книжицы:
ZFS разработана для максимизации производительности диска. Она побивает rsync настолько сильно, что маме rsync требуется срочная медицинская помощь. ZFS поддерживает список блоков диска которые отличаются между каждым последующим снимком. Процесс репликации не требует определять какие файлы были изменены - наша файловая система уже имеет эту информацию. Процесс репликации начинает отправку этих блоков настолько быстро, насколько это возможно, немедленно. Так как изменённые блоки содержат все метаданые для пересборки данных файлов, процесс репликации даже не нуждается в знании того, какие файлы соотносятся с этими блоками.
Пока rsync обходит вашу файловую систему, просматривая каждый файл, проверяя его временной штамп, вычисляя контрольную сумму и сравнивая их с версиями на вашей другой стороне, ZFS уже завершит свою работу. Если у вас имеется 10ТБ данных, причём только 1ГБ изменён, rsync всё- таки вынужден проверять каждый файл. ZFS только захватывает 1ГБ изменённых блоков и отправляет их.
Источник:
onreader.mdl.ru/AdvancedZFS/content/Ch04.html

А вообще, книжка называется "Полная виртуализация. Базовая коммерческая редакция: Proxmox-freeNAS-Zentyal-pfSense"
Главное, всё сделано на опенсорсе!
onreader.mdl.ru/VirtualizationComplete/content/index.html
starik-2005; YPermitin; +2 Ответить
44. YPermitin 9061 05.08.19 16:32 Сейчас в теме
(43) вот это поворот!

Я это не пробовал, но интересно почитать и поэксперементировать.

Конечно, это стек *nix, не знаю на сколько это сейчас интересно сообществу. Если у Вас уже есть результаты проб и ошибок, то напишите.
45. 3vs 05.08.19 16:45 Сейчас в теме
(44)Юрий, это всё теория!
У меня нет на работе железа даже один проксмокс поставить... :-(

Но эксперименты с FreeNas или XigmaNAS с ZFS впечатляют.
Представьте, шифровальшик зашифровал все файлы на разделе под ZFS,
Никаких проблем, восстанавливаем из снепшота информацию взад!

В принципе, здесь можно развернуть хранилища на FreeNas или XigmaNAS
и попробовать поэкспериментировать с этим.
Везёт автору книжки, у него, похоже, в Штатах там денег немеряно... :-)
YPermitin; +1 Ответить
46. 3vs 05.08.19 19:55 Сейчас в теме
(45)Кстати, в хранилищах на FreeNas или XigmaNAS можно использовать адаптеры InfiniBand
ru.wikipedia.org/wiki/InfiniBand

Соответственно можно между хранилищами построить очень быстрые каналы, да и Windows Server 2012 вроде как поддерживает такие адаптеры.
Так что жЫрным конторам, обременённым наличием зелёной бумаги, есть куда вложить её!
49. starik-2005 2180 10.01.20 15:12 Сейчас в теме
(40)
Сделать общий модуль, куда бы передавался текст запроса из СКД отчета для выполнения на зеркальной базе.
Переделать Отчет СКД на работу с данными из внешнего источника.

У меня только один вопрос: как выполнить запрос в зеркальной базе? Если через COM объект, то это медленно. Лучше, конечно, сделать запрос на прямую в SQL без регистрации в кластере, но нужно переводить запрос в SQL нотацию с и обратно.
А зачем текст? Можно схему передавать. Да и СОМ не нужен - вебсервисы рулят, а схема сериализуется. В итоге полнофункциональный отчет, выполняющийся в другой базе, неотличимый от отчета из этой базы (мы в заголовок писали время актуальности снапшота и что отчет выполнен в нем, а не в локальной базе). В итоге т.к. вызывается стандартный компоновщик отчета в другой базе по переданной схеме со всеми расшифровками, то даже дописанный отчет (с кодом в модуле) отлично работает. А все эти СОМ и преобразованные запросы - это лишние сущности, в которых нет необходимости...
42. kabanoff 41 05.08.19 15:54 Сейчас в теме
Спасибо за статью. Интересно опробовать AlwaysOn в действии.

Как вариант, обойти readonly реплики можно (в теории) следующим образом:
1. Определить круг таблиц, которые подлежат изменению в процессе работы с копией: Config, CommonSettings, Files, Params, v8users и т.д.
2. Создать пустую копию БД, скопировать в нее эти таблицы из реплики.
3. Создать вьюхи по всем остальным таблицам. Это можно сделать автоматически скриптом. Вьюхи будут читать данные из реплики.
4. Пустить пользователей в эту копию БД, предварительно ограничив их правами доступа.

Плюсы:
1. Можно будет работать с репликой из 1С.
2. Можно выбрать стратегию обновления копии:
- пересоздавать все таблицы с заданной периодичностью либо по необходимости.
- пересоздавать только таблицы вьюх, остальные таблицы обновлять самостоятельно. Так, например, можно будет сделать свою конфигурацию для отчетности (правда, надо не забыть, чтобы она соотносилась со структурой самой БД) или вести свой список пользователей, кому необходим доступ к отчетности.

Минусы:
Сложность в первоначальной настройке такого стенда (как минимум, нужно выявить все таблицы, в которые 1С должна писать данные).
48. IT_Magnit 09.01.20 22:31 Сейчас в теме
(42)
Вариант, но вроде можно проще. С помощью дата акселератора.
На ИТС написано, что его можно использовать так:
"Для варианта использования внешней СУБД важно значение параметра Тип репликации. При значении "Стандартная" за актуальностью данных в копии следит сервис копий баз данных (значение по умолчанию, рекомендуется использовать его). При значении "Внешняя" за актуальностью данных в копии должен следить сторонний механизм, не относящийся к кластеру серверов "1С". "
Т.е. ты этот механизм можешь на реплику настроить, а дальше он все сам без создания сервисной базы с вьюхами.
47. Yashazz 3319 11.08.19 10:42 Сейчас в теме
Спасибо, отличная статья.
YPermitin; +1 Ответить
Оставьте свое сообщение
Вопросы с вознаграждением