При работе с высоконагруженными системами, где объем информационной базы исчисляется терабайтами, одной из самых острых проблем становится падение производительности при выполнении тяжелых аналитических отчетов. В оперативной базе одновременно работают сотни пользователей: одни выписывают первичные документы (OLTP-нагрузка), другие пытаются построить отчет по продажам за три года (OLAP-нагрузка). В этой статье мы разберем, как встроенный механизм «Копии баз данных» помогает разделить эти потоки и обеспечить стабильную работу системы.
Давайте проанализируем суть этой технологии. Механизм «Копии баз данных» — это штатная возможность платформы 1С:Предприятие (начиная с версии 8.3.14), доступная только для лицензий уровня КОРП. Основная идея заключается в том, что мы создаем одну или несколько копий определенных таблиц базы данных на других серверах и перенаправляем туда запросы на чтение. Это позволяет разгрузить основную рабочую базу от ресурсоемких операций.
Рассмотрим ключевые преимущества, которые мы получаем при внедрении этой технологии:
Выясним, какие типы копий нам предлагает платформа. На данный момент существует два основных направления:
1. Копии на базе классических СУБД. В этом случае мы разворачиваем еще один экземпляр SQL-сервера. Платформа 1С самостоятельно создает там необходимые таблицы и организует перенос данных. Это хорошее решение для очень больших объемов данных, которые не помещаются в оперативную память.
2. Акселератор данных (Data Accelerator). Это собственная разработка фирмы 1С — СУБД типа In-Memory. Она хранит данные целиком в оперативной памяти сервера. Разберем по шагам: Акселератор оптимизирован для аналитических запросов (агрегации, группировки). Если ваш отчет на обычном SQL выполняется 10 минут, то в Акселераторе он может выполниться за несколько секунд. Однако это требует значительных объемов оперативной памяти на сервере копии.
Проанализируем важный аспект: актуальность данных. В отличие от синхронной репликации на уровне СУБД, механизм 1С работает асинхронно. Это означает, что данные в копии всегда будут немного отставать от основной базы.
Как это работает под капотом? При изменении данных в основной базе (например, проведении документа), платформа фиксирует изменения. Затем специальный фоновый процесс (менеджер копий) передает эти изменения в базу-копию. Задержка может составлять от нескольких миллисекунд до нескольких секунд. Нам важно понимать, что для оперативной работы (например, проверка остатков на складе в момент отгрузки) копии использовать нельзя, так как там может быть неактуальная информация.
Рассмотрим алгоритм подключения механизма. Настройка выполняется в несколько этапов:
МенеджерКопийБазДанных создается описание новой копии.КопияБазыДанных.Посмотрим на пример кода, который позволяет программно проверить состояние копии или настроить ее параметры:
// Получаем менеджер копий и выбираем нужную нам копию по имени
КопияОбъект = ДистанционноеУправлениеЗавершениемРаботы.ПолучитьКопию("АналитическаяКопия");
// Устанавливаем признак использования копии для текущего сеанса
УстановитьИспользованиеКопийБазДанных(Истина, "АналитическаяКопия");
Выясним причину, по которой этот механизм удобнее, чем простое создание «базы для отчетов» средствами SQL. Платформа 1С обладает механизмом автоматического перенаправления запросов. Если в настройках базы указано, что копию можно использовать для определенных отчетов, то разработчику даже не нужно менять код запроса. Система сама проанализирует:
Если все условия соблюдены, запрос уйдет на копию незаметно для пользователя. Однако мы можем управлять этим и принудительно. Рассмотрим пример использования в запросе:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрНакопления.Продажи.Обороты";
// Явно указываем, что хотим использовать копию базы данных
Запрос.СвойстваУправленияОжиданием.ИспользованиеКопийБазДанных = ИспользованиеКопийБазДанных.Использовать;
Результат = Запрос.Выполнить();
Часто возникает вопрос: почему бы не использовать старый добрый РИБ (распределенные информационные базы)? Давайте проанализируем ситуацию. РИБ требует создания полноценного узла, обмена сообщениями, контроля конфигурации. Это «тяжелый» процесс. «Копии баз данных» работают на уровне платформенного движка, они быстрее в настройке и не требуют изменения бизнес-логики конфигурации.
Если сравнивать с SQL-репликацией (например, AlwaysOn), то преимущество 1С в том, что она «понимает» структуру метаданных. SQL-сервер не знает, какой запрос является «отчетом», а какой «проведением». 1С же может гибко управлять нагрузкой, зная контекст выполняемой операции.
Если вы столкнулись с тормозами на базе в 1 Тб, проанализируем следующие шаги по внедрению копий:
В итоге, механизм «Копии баз данных» — это мощный инструмент для систем уровня Enterprise. Он позволяет не просто «выжить» при росте базы, а обеспечить комфортную работу пользователей, не заставляя их ждать формирования отчетов часами. Несмотря на сложность настройки и требования к лицензиям КОРП, для баз объемом 1 Тб это одно из самых правильных и перспективных архитектурных решений.