Основные подходы к оптимизации RLS
Row Level Security (RLS) в 1С может серьёзно влиять на производительность, если не уделять внимание правильному проектированию ограничений доступа.
Избегай периодических регистров в условиях RLS
- Периодические регистры требуют дополнительных запросов для получения актуального значения на дату
- Это многократно увеличивает нагрузку при массовых проверках доступа
- Используй непериодические справочники или константы вместо периодических регистров сведений
Используй заранее подготовленные данные
- Храни предвычисленные значения для условий доступа в отдельных таблицах
- Избегай вычислений «на лету» прямо в тексте шаблона RLS
- Это позволяет СУБД строить более эффективные планы выполнения запросов
Минимизируй количество соединений в шаблоне RLS
- Каждое
JOIN в условии RLS добавляется к каждому запросу, обращающемуся к объекту
- Старайся формулировать условия через простые выборки из одной таблицы
- Используй вспомогательные таблицы с уже готовыми, денормализованными данными
Применяй функциональные опции
- Функциональные опции позволяют полностью отключать RLS для отдельных ролей или конфигураций
- Если пользователю не нужна детализация доступа — не применяй к нему ограничения
- Это исключает лишние условия из запросов на уровне платформы
Итог
Ключевая идея — RLS-условие встраивается в каждый запрос к защищённому объекту, поэтому его сложность напрямую влияет на производительность всей системы. Чем проще и быстрее вычисляется условие, тем меньше накладных расходов.