ВСТУПЛЕНИЕ.
Для начала хочу сказать, что механизм «Копии базы данных» доступен только для лицензии КОРП и только после получения дополнительной лицензии (лицензия на выделенную функциональность, которая также устанавливается на сервер) и тоже впервые появившейся в версии платформы 1с 8.3.14. Так как на момент написания публикации механизм «Копии базы данных» имеет статус бета-версии.
Как получить лицензию на тестирование выделенной функциональности, описано в статье по этой ссылке http://1c.ru/news/info.jsp?id=25182 в главе «Тестирование выделенной функциональности».
Коротко поясню, что такое база OLAP. База OLAP это копия базы данных изолированная от основной базы (возможно даже расположенная под управлением другой СУБД или на другом физическом сервере) и используемая только для чтения, т.е. для получения отчетов в основном для отчетов, которые сильно нагружают базу данных.
Собственно новый механизм 1с «Копии базы данных» и позволяет средствами платформы создавать и работать с базами OLAP. Возможно два варианта хранения копий базы данных это непосредственно в базе данных под управлением любой из СУБД (Microsoft SQL Server, Oracle Database, PostgreSQL) или же в специальной службе «Дата акселератор» являющейся частью механизма «Копии базы данных», которая загружает выбранные таблицы базы данных в оперативную память сервера, что на много повышает скорость чтения данных.
СОЗДАНИЕ КОПИИ БАЗЫ ДАННЫХ МЕХАНИЗМАМИ ПЛАТФОРМЫ 1С.
Сразу хочу сказать, что механизм копий базы данных не является инструментом создания резервной копии рабочей базы данных. Созданная копия не является полноценной информационной базой, и работать с ней как с обычной базой данных невозможно.
После активации на сервере дополнительной лицензии на выделенную функциональность в управляемом приложении в стандартных обработках появится обработка «Управление копиями базы данных», также режим совместимости должен быть установлен «Не использовать».
В обработке необходимо нажать кнопку «Добавить» для того, чтобы создать новую копию базы данных или «Дата акселератор». Одновременно может существовать несколько копий базы данных.
Назначение колонок:
«Имя» - Задается имя копии базы данных, как она будет представляться в 1с.
«Встроенный дата акселератор» - Если колонка имеет значение «ДА» то для копии базы данных будет использоваться служба дата акселератора и остальные колонки дальше заполнять не нужно. Если значение колонки «НЕТ» то копия базы данных будет расположена на SQL сервере.
«Тип репликации» - Если установлено значение «Стандартная» то система 1с способна сама поддерживать копию базы данных в актуальном состоянии и переносить изменения с основной базы в копию при помощи специальных регламентных заданий, объекта «МенеджерКопииБазыДанных» и метода программного интерфейса КопииБазыДанных.Обновить(). Если установлено другое значение, то Система «1С:Предприятие» не предпринимает никаких действий по синхронизации данных между основной базой данных и копией. Ответственность за создание таблиц с требуемой структурой, а также за механизм и регулярность репликации данных, целиком лежит на персонале, настраивающем параметры копии базы данных.
«Сервер баз данных» - Указывает сервер на котором будет расположена база данных.
«Тип СУБД» - СУБД используемая для размещения таблиц-копий, допускается использование какой-либо из следующих СУБД: Microsoft SQL Server, Oracle Database, PostgreSQL. СУБД кластера серверов и копии базы данных могут различаться.
«База данных» - Имя базы данных на сервере.
«Создать базу данных» - Если установлено значение «Да» то база данных будет создана, если пользователь через которых происходит подключение к СУБД обладает соответствующими правами. Если значение «Нет» то будет использоваться существующая база данных.
«Пользователь» - Указывается пользователь СУБД.
«Пароль» - Указывается пароль пользователя СУБД.
Справа, в дереве метаданных, необходимо указать те объекты метаданных, для которых будет создана копия.
При нажатии на кнопку «Обновить копию» начнется обновление текущей выделенной копии базы данных. Обновление копии выполняется в синхронном вызове, т.е. клиентское приложение после нажатия кнопки не будет отвечать, пока не будет полностью выполнен перенос данных.
Для того чтобы отчет мог выполниться на копии, необходимо чтобы все таблицы, используемые при формировании отчета, были расположены в копии базы данных. Отчеты могут обращаться к множеству объектов метаданных. В некоторых случаях эти объекты метаданных могут явно не встречаться в тексте запроса на языке "1С", поэтому настройка списка объектов метаданных для размещения в копии может вызывать трудности.
Для упрощения этой процедуры можно воспользоваться обработкой Подбор таблиц для Дата акселератора с помощью, которой можно подбирать таблицы не только для копии базы данных для службы «Дата акселератор», но и для копии на базы расположенные на SQL сервере. Она позволяет настроить копию несколькими способами:
- По данным технологического журнала анализирует текст запроса к СУБД и получает объекты метаданных.
- По данным текста запроса на языке 1С получает объекты метаданных.
- По данным отчета конфигурации на базе СКД анализирует тексты запросов на языке "1С" и получает объекты метаданных.
По полученным данным обработка выбирает для копирования в копию необходимые объекты метаданных и запускает процесс обновления данных в копии так, чтобы она была готова к выполнению запроса. Единственный выявленный мною ее недостаток, что данная обработка не умеет определять таблицы для добавления в копию, если к ним идет обращение через две точки т.е. через два соединения. К примеру «Договор.Организация.Директор» т.е. таблица типа «Справочники.Сотрудники» на которую ссылается реквизит «Директор» не будет добавлена в копию базы данных ее необходимо будет добавить руками в обработке «Управление копиями базы данных». Так как данное обращение к справочнику сотрудники в запросе не совсем правильно, то можно сказать, что правильные запросы обработка и обрабатывает верно.
Скачать обработку «Подбор таблиц для Дата акселератора» можно по ссылке Подбор таблиц для Дата акселератора
ИСПОЛЬЗОВАНИЕ МЕХАНИЗМА ПЛАТФОРМЫ КОПИИ БАЗЫ ДАННЫХ В ОТЧЕТАХ СКД И ЗАПРОСАХ.
Для того, чтобы отчет на СКД стал брать данные из копии базы данных необходимо его слегка доработать.
В настройках отчета на закладке «Дополнительные настройки» необходимо выставить параметры:
Требуемая актуальность данных – Если значение установлено в «Актуальные» то данные будут получаться только из основной базы данных. При установке значения «Любые» при формировании отчета будут использоваться данные из копии, которая содержит все таблицы, необходимые для выполнения запроса и эти таблицы содержат данные с требуемой актуальностью. Если нужной копии базы данных нет, то запрос будет исполнен в основной базе данных. Если стоит значение «Авто» то решение о работе с копией принимается платформой автоматически.
Требуемое время актуальности данных – Если значение больше 0, то от текущего времени отнимается значение - получается дата в прошлом. Если в основной базе не было изменений после полученной даты, либо все измененные таблицы в копии обновлены после этой даты, запрос будет выполнен в копии. В противном случае запрос будет выполнен в основной базе. Если значение 0, то проверяется наличие не перенесенных изменений. Если таких нет, то запрос может быть исполнен в копии баз данных. В противном случае запрос будет выполнен в основной базе.
В принципе этих двух значений в отчете на СКД достаточно, чтобы отчет стал выполняться на копии базы данных, при соблюдении остальных условий.
При использовании системы компоновки данных предоставляется возможность управлять выводом в отчет информации о том, откуда получена информация и какова актуальность полученных данных. Для этого предназначены параметры:
ВыводитьАктуальностьДанных - содержит дату и время последнего фактического обновления данных в копии. Для актуальных данных содержит время начала выполнения запроса.
ВыводитьКопиюБазыДанных - содержит имя копии базы данных, которая использована для получения данных.
В нашем конкретном примере отчет формировался в периоде с 01.01.2014 по 01.05.2019 время выполнения следующее:
На основной базе формируется - 15 сек.
На обычной копии БД 5 сек.
На дата акселераторе - 1 сек.
Время выполнение всегда стабильное.
Также и в коде объект «Запрос» может быть выполнен в копии базы данных. Задание требуемой актуальности данных управляется с помощью свойств объекта «Запрос» Запрос.ТребуемаяАктуальностьДанных и Запрос.ТребуемоеВремяАктуальностиДанных аналогичные свойствам параметров вывода компоновки данных, приведенных выше.
После получения данных с помощью объекта «Запрос», платформа предоставляет возможность получить информацию о том, откуда получались данные и насколько они актуальны. Такую информацию можно получить из свойств объекта «РезультатЗапроса»:
ДанныеАктуальны - позволяет определить, актуальны или нет данные, полученные запросом.
ВремяАктуальности - содержит дату и время последнего фактического обновления данных в копии. Для актуальных данных содержит время начала выполнения запроса.
КопияБазыДанных - содержит имя копии базы данных, которая использована для получения данных.
ПОДДЕРЖАНИЕ КОПИИ БАЗЫ ДАННЫХ В АКТУЛЬНОМ СОСТОЯНИИ.
В процессе работы система отслеживает изменения переносимых данных, которые выполнены в основной базе данных, и по команде выполняет передачу этих изменений в каждую копию базы данных. Перенос данных в зарегистрированные копии базы данных выполняется с помощью специального метода программного интерфейса КопииБазыДанных.Обновить(). Это касается только «Дата акселератора» и копии базы данных в которой настройка «Тип репликации» установлена в значение «Стандартная». Во всех остальных случаях актуальность копий базы данных лежит полностью на обслуживающем персонале базу данных. Фактически, при создании копии базы данных, в базе данных копии создаются таблицы, которые являются копиями соответствующих таблиц объектов информационной базы. Состав таблиц копии определяется с помощью свойства «Состав» объекта, описывающего конкретную копию базы данных (объект МенеджерКопииБазыДанных). Обновление копий базы данных можно выполнять асинхронно, например, с помощью регламентного задания (по аналогии с обновлением индекса полнотекстового поиска). Другими словами, копия базы данных становится «настоящей» копией только после того, как в нее перенесены изменения, зафиксированные для переносимых таблиц.
Физически для обновления данных используются системные фоновые задания, работу которых можно вынести на отдельный рабочий сервер. Одно фоновое задание отвечает за первоначальное заполнение данными копии базы данных, а другое для актуализации данных в копиях.
Для того чтобы получение данных исполнялось в копии базы данных, необходимо выполнение следующих условий:
1. Все таблицы, использованные в запросе или во всех источниках данных системы компоновки данных, должны располагаться в одной копии. Под термином «все» понимаются следующие таблицы, использованные в запросе (явно или неявно):
- Таблицы, фигурирующие в качестве источников запроса.
- Таблицы, из которых получаются какие-либо данные в запросе (например, при обращении «через точку»).
- Таблицы, которые задействованы в условиях ограничений доступа к данным (если таковые присутствуют).
2. Актуальность данных копии удовлетворяет требованиям разработчика.
НЕ ВСЕ ТАК ГЛАДКО, ОГРАНИЧЕНИЯ ИСПОЛЬЗОВАНИЯ.
Механизм копии базы данных имеет условия выполнения на копии базы данных:
- Запрос выполняется вне транзакции;
- Не используется объект встроенного языка "МенеджерВременныхТаблиц".
- "Требуемая актуальность данных" установлено в значение "Авто" или "Любые".
- Все таблицы, необходимые для исполнения запроса, имеются в копии баз данных.
- Актуальность данных в копии удовлетворяет тем требованиям, которые установил пользователь или разработчик. Актуальность данных определяется исходя из значения параметра ТребуемоеВремяАктуальностиДанных.
При соблюдении этих условий запрос или отчет на СКД будет выполнен на копии базы данных.
В свою очередь для того, чтобы отчет на СКД или запрос были выполнены на «Дата акселератор» к выше перечисленным условиями еще необходимо добавить условия:
- В запросе не используется табличные части
- В запросе не используется В ИЕРАРХИИ
Также для «Дата акселератора» надо добавить условие, что он работает только в том случае, когда кластер запущен под управлением 64-разрядной операционной системы. Дата акселератор не поддерживает работу под управлением 32-разрядной операционной системы.
И самое главное, ограничение механизма «Дата акселератора» заключается в том, что он оптимизирован для выполнения аналитических запросов, обрабатывающих большие объемы данных в СУБД и возвращающих в качестве результата небольшое количество записей, т.е. запрос или отчет на СКД должен быть приближен к OLAP-кубу. Это является рекомендованным сценарием использования механизма. При использовании Дата акселератора в других сценариях, время исполнения запроса механизмом Дата акселератором может быть больше, чем при использовании основной базы данных.
ТРЕБОВАНИЯ К СРЕДЕ ДЛЯ РАБОТЫ СЕРВИСА «ДАТА АКСЕЛЕРАТОР».
Сервис недоступен при использовании режима совместимости 8.3.13 и ниже.
Рекомендуемые системные требования:
- Операционная система семейства Linux:
- объем оперативной памяти 512Гб;
- изменить стратегию управления оперативной памятью – всегда выделять столько памяти, сколько требует приложение. Значение параметра overcommit_memory=1. Устанавливается с помощью команды sudo sysctl -w vm.overcommit_memory=1.
- Операционная система семейства Windows:
- объем оперативной памяти 512Гб;
- использование файла подкачки объемом не менее 512Гб.
ЗАКЛЮЧЕНИЕ
Как видно, сервер нужен не слабенький для поддержания работы службы «Дата акселератор», но можно же заливать не всю базу и применим «дата акселератор» на ограниченное число отчетов. Я считаю, для обработки специфического массива данных большого размера «Дата акселератор» подходит отлично при том, что трудозатраты по увеличению быстродействия отчета не большие, а прирост производительности самого отчета очень значительный. Я рад что 1с делает шаги в сторону разработки платформы для высоконагруженных систем и надеюсь, механизм «Копий баз данных» будет со временем только развиваться и будут появляться новые технологии в данном направлении.
ИСПОЛЬЗУЕМЫЕ МАТЕРИАЛЫ