Ситуация, когда администраторы работают в системе без задержек, а рядовые сотрудники сталкиваются с многоминутным ожиданием отчетов и интерфейса, — классический признак проблем с механизмом RLS (Record Level Security). В сложных прикладных решениях, таких как «Агропромышленный комплекс», «ERP» или «Комплексная автоматизация», этот механизм накладывает значительную нагрузку на СУБД. Проанализируем причины деградации производительности и разберем по шагам методы оптимизации системы.
Когда мы ограничиваем права пользователя (например, запрещаем видеть зарплату или данные определенных подразделений), платформа 1С при каждом запросе к базе данных добавляет к тексту SQL-запроса дополнительные условия «ГДЕ...». Если условий много, и они ссылаются на сложные иерархии, SQL-сервер тратит колоссальное время на построение плана запроса и соединение таблиц. Для комплексного анализа ролей, профилей и ограничений RLS можно использовать обработку для анализа и настройки прав доступа.
Рассмотрим, как это работает в современных конфигурациях на базе БиблиотекаСтандартныхПодсистем. В системе существует два режима работы RLS: «Стандартный» и «Производительный» (с использованием расширения 1С для SQL). Проанализируем ситуацию: если ваша конфигурация использует производительный режим, 1С создает в базе данных скрытые таблицы прав доступа. Если статистика по этим таблицам не актуальна, пользователи с ограниченными правами «зависают».
Что нужно сделать:
Администрирование — Настройки прав доступа и проверим, включен ли производительный режим ограничений.Обновление данных о правах доступа. Если оно завершается с ошибкой или висит в состоянии выполнения часами, это первый признак того, что индексы таблиц прав доступа не справляются.В тексте обращения упоминается, что «после реиндексации база летала». Это прямое указание на то, что планы запросов SQL-сервера становятся неоптимальными из-за устаревшей статистики. Для пользователей с полными правами (администраторов) запросы простые, и SQL справляется даже с плохой статистикой. Для «обрезанных» прав запросы усложняются в разы, и малейшая ошибка в статистике приводит к выбору крайне медленного плана выполнения (например, Index Scan вместо Index Seek).
Разберем по шагам настройку регламентов SQL:
UPDATE STATISTICS [Имя_Таблицы] WITH FULLSCAN;
Особое внимание уделим таблицам, связанным с регистрами сведений прав доступа и константами.Rebuild Index (перестроение) для тех таблиц, где фрагментация выше 30%, и Reorganize Index для остальных.Ситуация, когда «после небольшого обновления производительность вернулась на плохой уровень», часто связана с так называемым «динамическим обновлением» (обновление без выгона пользователей). В среде 1С это считается дурным тоном для продуктивных баз по следующим причинам:
Config и ConfigSave в базе данных SQL.Рекомендация: Всегда выполняйте обновление конфигурации в монопольном режиме. После обновления крайне желательно очистить кэш сервера 1С. Разберем, как это сделать: нужно остановить службу 1С и удалить содержимое папок в профиле пользователя, под которым работает служба (обычно это C:\Users\usr1cv8\AppData\Local\1C\1cv8\ и Roaming), сохранив только файл со списком баз.
Проанализируем железо: процессоры Intel Xeon Silver 4210R имеют базовую частоту 2.4 GHz. Для 1С это не самый высокий показатель, так как платформа чувствительна к скорости работы одного ядра. Если в Windows Server включена схема «Сбалансированное электропитание», процессор будет постоянно снижать частоту для экономии энергии, а «просыпаться» он не успевает из-за специфики коротких транзакций 1С.
Выясним причину через настройки:
Power Management выберем Maximum Performance. Это заставит ядра процессора работать на максимальной частоте Turbo Boost постоянно.Intel VROC. Программные RAID-массивы на SATA-дисках часто имеют большие задержки (Latency). Если очередь диска (Disk Queue Length) превышает 1-2 единицы в моменты тормозов, стоит рассмотреть переход на аппаратный RAID-контроллер с кэшем или перенос базы на NVMe-накопитель, минуя VROC.Использование SQL Server 2012 с современными версиями платформы требует специфических настроек. В частности, для борьбы с блокировками в TempDB, которые возникают при построении временных таблиц RLS, необходимо включить флаги трассировки.
Рассмотрим важные флаги:
TempDB.Также проверим параметр Compatibility Level (Уровень совместимости). Для SQL 2012 он должен быть 110. Если база была перенесена со старого сервера, уровень мог остаться 100 или ниже, что мешает оптимизатору запросов работать корректно.
На одном сервере крутится 7 баз, из которых часть — огромные копии по 66 ГБ. Проанализируем нагрузку: когда программисты запускают отладку или тяжелые обработки в копиях, они забивают дисковую очередь и кэш SQL-сервера (Buffer Pool). В итоге рабочая база «вытесняется» из оперативной памяти, и SQL вынужден читать данные с медленных дисков.
Решение:
Max Server Memory в настройках SQL Server, чтобы он не забирал всю память у ОС и сервера 1С, но при этом обеспечим, чтобы рабочая база (12 ГБ) целиком помещалась в кэш.УправлениеДоступом.Помните, что производительность 1С — это комплексный показатель, зависящий от синергии железа, настроек СУБД и качества программного кода. Регулярный мониторинг через Центр Управления Производительностью или обычный замер производительности в конфигураторе поможет локализовать конкретную строку кода или запрос, вызывающий задержку. Для мониторинга настроек и запросов СУБД можно использовать инструмент для анализа SQL-сервера глазами 1С-специалиста.