Рано или поздно любая растущая организация сталкивается с тем, что привычная и простая в обслуживании файловая версия 1С:Предприятие начинает сильно тормозить. Особенно остро эта проблема проявляется при работе в терминальном режиме (RDP), когда под управлением одного сервера одновременно работают десятки пользователей, у каждого из которых запущено по несколько информационных баз.
В этой статье мы подробно проанализируем реальный кейс: терминальный сервер с 8–10 пользователями, у каждого из которых открыто от 3 до 5 баз (размером от 3 до 6 Гб). Базы начали катастрофически зависать после очередного обновления платформы. Мы разберем по шагам, как локализовать проблему, настроить операционную систему, оптимизировать саму платформу 1С и принять обоснованное решение — оставаться на файловой версии или переходить на клиент-серверный вариант.
Выясним первопричину резкого падения производительности. Очень часто администраторы стремятся обновлять платформу 1С до самых последних релизов, следуя рекомендациям обновлений конфигураций. Однако новые ветки платформ (например, 8.3.16 и выше) содержат множество изменений в механизмах кэширования, работы с памятью и внутренними базами данных SQLite (используемыми для журналов регистрации). Это может приводить к критическому замедлению работы файловых баз.
Если после обновления на платформу 8.3.16.x вы заметили резкое снижение быстродействия, выполним следующие действия:
ReadMe.txt или на портале ИТС).8.3.15.1830, не нужно без крайней необходимости устанавливать 8.3.16 или более новые сборки.8.3.15.1869. Как показывает практика, один только этот шаг позволяет мгновенно вернуть производительность системы к прежним комфортным показателям.Проанализируем аппаратную конфигурацию сервера. Файловая 1С критически чувствительна к скорости дисковых операций (показателю IOPS) и объему свободной оперативной памяти. Работа в терминальном режиме на обычном жестком диске (HDD) — это главная системная ошибка.
Выполним модернизацию дисков по следующей схеме:
1cv8.exe может достигать 30–50 штук. Каждая открытая база в файловом режиме потребляет от 300 до 800 Мб оперативной памяти. Лимит в 16 Гб ОЗУ в таких условиях исчерпывается мгновенно, после чего операционная система начинает активно сбрасывать данные в файл подкачки (swapping) на диск, парализуя работу процессора. Для такой нагрузки минимально необходимый объем памяти составляет 32 Гб, а рекомендуемый — 64 Гб.Если бюджет компании ограничен и покупка серверных лицензий 1С пока не планируется, рассмотрим отличную альтернативу — запуск баз через веб-сервер. По умолчанию пользователи в терминальной сессии запускают так называемый «толстый» или стандартный тонкий клиент в режиме прямого доступа к файлу базы данных 1Cv8.1CD. Это заставляет сервер тратить ресурсы на отрисовку графического интерфейса каждого пользователя внутри RDP-сессии.
Мы можем разгрузить сервер, переведя пользователей на работу через веб-публикацию:
http://server_name/base_work).При такой схеме вся работа по передаче данных оптимизируется веб-сервером, снижается сетевая нагрузка, а главное — память сервера расходуется гораздо более экономно, так как исключается необходимость держать десятки «тяжелых» терминальных сессий пользователей.
Проанализируем состояние самих файловых баз данных. Зачастую базы сильно «раздуваются» после обновлений. Помимо регламентного тестирования и исправления (ТИИ), которое действительно необходимо проводить при подозрении на логические ошибки, следует обратить внимание на следующие технические параметры:
1. Оптимизация формата журнала регистрации. Начиная с версии 8.3.5, 1С по умолчанию создает журнал регистрации в формате SQLite (файл 1Cv8.lgp заменяется на 1Cv8.lgd). При интенсивной многопользовательской работе этот файл начинает блокировать базу. Попробуем вернуть старый текстовый формат журнала. Для этого в конфигурационном файле conf.cfg (находится в каталоге установки платформы 1С) добавим строку:
KeepLogFormat=LogAndLogGst
Это позволит снизить количество транзакционных блокировок при записи событий в журнал.
2. Изменение размера страницы базы данных с помощью утилиты cnvdbfl.exe. По умолчанию размер страницы файловой базы составляет 4 Кб. Если размер вашей базы превышает 4 Гб, настоятельно рекомендуется увеличить размер страницы до 64 Кб. Это не только ускорит чтение/запись данных за счет выравнивания блоков на SSD, но и увеличит максимальный лимит размера одной таблицы с 4 Гб до 64 Гб, предотвращая аварийное завершение работы при обновлениях.
Для этого выполним следующие действия в командной строке:
bin установленной платформы 1С:
"C:\Program Files\1cv8\8.3.15.1869\bin\cnvdbfl.exe" -c -s 64k "D:\1C_Bases\Accounting\1Cv8.1CD"
В операционных системах Windows Server, начиная с версии 2012, по умолчанию включена технология Dynamic Fair Share Scheduling (DFSS). Ее задача — предотвратить монополизацию ресурсов процессора или диска одним пользователем терминала. Однако для 1С эта служба работает во вред: как только один из бухгалтеров запускает тяжелый отчет или проведение документов, Windows Server искусственно ограничивает дисковый поток и процессорное время для его сессии. В результате 1С зависает намертво, хотя сам сервер может быть загружен всего на 15–20%.
Рекомендуется отключить эту функцию через системный реестр:
regedit).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Quota System. Изменим значение параметра EnableCpuQuota на 0.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TSFairShare\Disk. Изменим параметр EnableFairShare на 0 (это наиболее критичный параметр для дисковой активности файловой 1С).Файловая СУБД 1С совершает колоссальное количество мелких дисковых транзакций во временные директории. Если серверный антивирус проверяет каждый временный файл «на лету», работа программы замедляется в несколько раз.
Настроим исключения в антивирусе. Добавим в список доверенных зон (исключений из сканирования в реальном времени):
*.1CD, *.1CL, *.lgp, *.lgd.C:\Program Files\1cv8\ и C:\Program Files (x86)\1cv8\.%USERPROFILE%\AppData\Local\1C\ и %USERPROFILE%\AppData\Roaming\1C\.Также оптимизируем работу файловой системы NTFS на диске с базами данных. По умолчанию Windows при каждом обращении к файлу перезаписывает метку времени последнего доступа (Last Access Time). Отключим эту функцию, выполнив в командной строке с правами администратора следующую команду:
fsutil behavior set DisableLastAccess 1
Если все вышеперечисленные оптимизации выполнены, но базы размером более 6 Гб продолжают стабильно зависать при одновременной работе пользователей — это явный сигнал того, что файловый режим исчерпал свои технологические возможности. Файловая СУБД 1С блокирует всю базу целиком при записи данных любым пользователем (табличные блокировки), в то время как клиент-серверный вариант блокирует только конкретные строки таблиц.
При переходе на клиент-серверную версию рассмотрим два варианта:
Подведем итог. Начните оптимизацию с простых бесплатных шагов: откатитесь на стабильную 15-ю платформу, настройте исключения антивируса, отключите Fair Share в реестре Windows и перенесите базы на SSD. Если этих мер окажется недостаточно — планируйте поэтапный переход на клиент-серверную версию с использованием СУБД PostgreSQL.