Вопрос оптимального размещения кластера серверов 1С:Предприятия и СУБД (в частности, Microsoft SQL Server) является классической дилеммой системного администрирования. Нередко возникающие ошибки производительности и нехватки ресурсов ошибочно связывают исключительно с топологией серверов. Разберем подробно плюсы и минусы совместного и раздельного размещения служб, влияние виртуализации, а также выясним реальную причину ошибки «Недостаточно памяти для записи файла формата Base64».
Рассмотрим вариант, когда служба ragent (кластер 1С) и экземпляр СУБД функционируют в рамках одной операционной системы. Это решение имеет ключевое преимущество для платформы 1С — максимальную скорость межузлового взаимодействия.
Платформа 1С генерирует огромное количество мелких последовательных SQL-запросов. При размещении служб на одном хосте обмен данными происходит через локальный протокол оперативной памяти Shared Memory. Это полностью исключает накладные расходы сетевого стека: трафик не проходит через сетевые адаптеры, виртуальные коммутаторы и сетевые драйверы.
Однако совместное размещение требует строгого контроля системных ресурсов. Для стабильной работы настроим следующие параметры:
max server memory. Если этого не сделать, SQL Server займет всю доступную оперативную память хоста, вызвав нехватку памяти для рабочих процессов 1С (rphost) и сброс их страниц в файл подкачки..mdf), журналы транзакций (.ldf), системные базы tempdb и рабочие каталоги 1С (журналы регистрации и временные файлы) не должны конкурировать за одну дисковую очередь.Проанализируем сценарий с разделением служб на разные физические серверы или виртуальные машины. Данный подход традиционно применяется в крупных инфраструктурах для горизонтального масштабирования и построения отказоустойчивых кластеров (например, с технологиями Always On).
Однако разделение на две виртуальные машины в пределах одного физического сервера часто приводит к серьезной деградации производительности:
Shared Memory.CPU Ready Time.Если разделение на виртуальные машины необходимо по регламентам инфраструктуры, обеспечим статическое выделение памяти со 100% резервированием (исключая механизм Ballooning) и жестко зафиксируем топологию vNUMA в соответствии с физическими сокетами хоста.
Выясним причину ошибки нехватки памяти при записи Base64. Данная ошибка не связана напрямую со схемой расположения серверов 1С и MS SQL. Она возникает на уровне сервера 1С или клиентского приложения при сериализации тяжелых двоичных данных в XML-поток (например, при вызове ЗаписатьXML с использованием ЗаписьFastInfoset).
Чаще всего сбой происходит в механизмах версионирования объектов, обмена данными (РИБ, EnterpriseData) или при работе с присоединенными файлами и реквизитами типа ХранилищеЗначений.
Разберем по шагам, как локализовать и устранить данную проблему:
rphost ограничен адресным пространством в 2–3 ГБ. При попытке выделить непрерывный блок памяти под крупную строку Base64 процесс аварийно завершает операцию. Решением является перевод кластера на 64-разрядную версию платформы 1С.Допустимый объем памяти и Интервал превышения допустимого объема памяти, чтобы предотвратить фрагментацию адресного пространства при длительной работе процессов без перезапуска.Temp учетной записи, от имени которой запущена служба сервера 1С.