Насколько быстро работает RLS в 1С:Розница при большом количестве магазинов и пользователей?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

При масштабировании розничной сети до 100 и более торговых точек перед разработчиками и архитекторами встает острый вопрос разграничения прав доступа. Типовой механизм RLS (Record Level Security) кажется логичным решением, однако на практике он может стать «бутылочным горлышком» всей системы. Рассмотрим подробнее, как ведет себя RLS в высоконагруженных базах 1С:Розница 2.2, проанализируем реальный опыт внедрений и определим оптимальные стратегии работы с большими объемами данных.

Почему RLS замедляет работу системы?

Прежде чем переходить к конкретным цифрам, проанализируем механику работы RLS. Этот механизм работает на уровне СУБД, автоматически добавляя дополнительные условия к каждому SQL-запросу. Разберем основные причины деградации производительности:

  1. Раздувание текста запроса: Простой запрос на выборку документов превращается в громоздкую конструкцию с множеством соединений (JOIN) с таблицами прав доступа.
  2. Проблемы оптимизатора SQL: Из-за сложности сгенерированного запроса оптимизатор СУБД (MS SQL или PostgreSQL) часто выбирает неоптимальный план выполнения, игнорируя существующие индексы.
  3. Нагрузка на запись: При записи каждого чека или документа система обязана проверить права пользователя. При одновременной работе 200 пользователей это приводит к массовым блокировкам.
  4. Рост таблиц прав: При большом количестве магазинов и групп доступа служебные таблицы 1С начинают занимать значительный объем, что замедляет работу tempdb.

Опыт эксплуатации на реальных проектах

Проанализируем ситуацию, когда в базе работают 700+ магазинов. Практика показывает, что использование классического RLS в таких масштабах практически невозможно. Пользователи сталкиваются с тем, что простейшие действия, такие как открытие списка документов или проведение чека, могут выполняться по несколько минут или даже «повесить» сеанс на полчаса.

В базах объемом более 600 Гб включение RLS часто приводит к полной остановке операционной деятельности. Даже если данных пока немного, при достижении порога в 1000–3000 документов в день производительность начнет падать в геометрической прогрессии. Проблема усугубляется, если пользователю назначено более одной роли с ограничениями — платформа вынуждена объединять условия (OR/UNION), что еще сильнее утяжеляет запросы.

Альтернатива №1: Использование РИБ (Распределенной информационной базы)

Для 100 магазинов наиболее стабильным вариантом остается создание РИБ по магазинам. Выясним причины, почему этот метод предпочтительнее работы всех касс напрямую в Центральной Базе (ЦБ):

  1. Изоляция данных: В базу конкретного магазина попадают только те данные, которые относятся непосредственно к нему. Не нужно настраивать RLS в периферийной базе, так как «чужих» данных там просто физически нет.
  2. Отказоустойчивость: При обрыве связи с центральным сервером магазин продолжает торговать.
  3. Производительность: Нагрузка распределяется между локальными серверами магазинов и центральным сервером, который занимается только консолидацией данных.

Однако РИБ накладывает обязательства по контролю обменов. Если ваша цель — видеть актуальные остатки в режиме реального времени во всей сети, перейдем к рассмотрению других вариантов.

Альтернатива №2: Программные фильтры и «мини-RLS»

Если работа в единой базе критична, рассмотрим вариант программного ограничения доступа. Вместо включения флажка «Ограничивать доступ на уровне записей» в настройках программы, разработчики реализуют логику фильтрации самостоятельно. Рассмотрим, как это сделать:

  1. Параметры сеанса: При входе пользователя в систему в ПараметрыСеанса.ТекущийМагазин записывается ссылка на его торговую точку.
  2. Динамические списки: В формах списков документов (Чеки ККМ, Поступления, Реализации) устанавливается фиксированный отбор по этому параметру. Пользователь просто не видит чужие записи в интерфейсе.
  3. Общие модули и запросы: Во всех кастомных отчетах и обработках в запросы принудительно добавляется условие: ГДЕ Магазин = &ТекущийМагазин.

Такой подход работает молниеносно, так как SQL-запрос остается простым и понятным для оптимизатора. Единственный минус — риск прямого доступа к данным через консоль запросов, но для линейного персонала (директора магазинов, кассиры) эта защита является достаточной.

Современный «Производительный» режим RLS

Начиная с версии платформы 8.3.18, компания 1С внедрила упрощенный (производительный) режим RLS. Проанализируем ситуацию: если ваша конфигурация поддерживает этот режим, тормоза будут значительно меньше. Платформа заранее рассчитывает права доступа и сохраняет их во временных таблицах СУБД. Если вы все же решили использовать штатный механизм, обязательно убедитесь, что:

Требования к серверному оборудованию

Если работа с RLS в ЦБ на 200 пользователей неизбежна, требования к «железу» возрастают в разы. Выясним, на что обратить внимание при подборе сервера:

Резюме и рекомендации

Подводя итог, можно сказать: классический RLS в типовой Рознице 2.2 на 100 магазинов — это высокий риск остановки работы из-за тормозов. Если вы находитесь на этапе проектирования, выберите один из следующих путей:

  1. Для максимальной надежности: Используйте РИБ по магазинам. Это избавит от проблем с производительностью и обеспечит автономность точек.
  2. Для работы в единой базе: Откажитесь от типового RLS в пользу программных фильтров в формах и отчетах. Это потребует доработки конфигурации, но обеспечит мгновенный отклик системы.
  3. Если RLS необходим: Используйте только последнюю версию платформы с «производительным режимом» и обеспечьте сервер мощными высокочастотными процессорами.

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

← На главную