Как правильно распределить оперативную память между MSSQL и 1С:Предприятие и нужно ли устанавливать лимиты?

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

Вопрос оптимального распределения оперативной памяти на сервере, где совместно работают MSSQL Server и сервер 1С, является одним из самых критичных для обеспечения стабильности системы. Часто можно встретить мнение, что современные СУБД способны самостоятельно управлять ресурсами, однако на практике это нередко приводит к критическим сбоям и деградации производительности. Разберем подробно, почему ограничение памяти необходимо и как правильно рассчитать лимиты для различных конфигураций оборудования.

Почему ограничивать память SQL Server жизненно важно?

Проанализируем алгоритм работы SQL Server. По умолчанию эта СУБД спроектирована так, чтобы захватывать максимально доступный объем оперативной памяти для своего Buffer Pool (кэша данных). Это делается с благой целью — минимизировать медленные операции чтения с диска, удерживая данные в RAM.

Однако в среде 1С, где на этой же машине часто запущены службы rphost (рабочие процессы 1С), возникает конфликт интересов. Рассмотрим, что происходит, если лимит не установлен:

  1. SQL Server постепенно занимает 95–98% всей доступной памяти.
  2. Серверу 1С или операционной системе внезапно требуется дополнительная память для выполнения тяжелого запроса или формирования отчета.
  3. Поскольку свободной физической памяти нет, Windows начинает процесс вытеснения (Paging). Данные из RAM принудительно сбрасываются в файл подкачки на жестком диске.
  4. Производительность системы падает в десятки раз, интерфейс 1С «замирает», а пользователи начинают жаловаться на «фризы».

Поэтому ограничивать SQL Server нужно всегда, даже если он является единственным тяжелым приложением на сервере. Это гарантирует операционной системе «пространство для маневра».

Общая формула распределения памяти (ITS-стандарт)

Основываясь на рекомендациях фирмы 1С и лучших практиках администрирования баз данных, рассмотрим базовую формулу. Мы должны оставить операционной системе достаточный объем памяти для внутренних нужд и сетевого стека.

Рекомендация по резервированию для ОС: необходимо оставлять примерно 1 ГБ оперативной памяти на каждые 16 ГБ установленной физической памяти, но не менее 2–4 ГБ в абсолютном выражении.

Если SQL Server работает на выделенном сервере (без 1С), формула настройки Max Server Memory будет выглядеть так:

[Общий объем RAM] - [Память для ОС (1 ГБ на каждые 16 ГБ)] = Лимит SQL

Распределение памяти для совмещенного сервера (1С + SQL)

Ситуация усложняется, когда на одной машине (например, с 32 ГБ или 64 ГБ RAM) соседствуют и СУБД, и сервер приложений 1С. В этом случае мы должны разделить ресурсы между тремя потребителями: ОС, SQL и 1С.

Проанализируем пример для сервера с 32 ГБ оперативной памяти:

  1. Операционная система: зарезервируем 3–4 ГБ. Это обеспечит стабильную работу сетевых протоколов и системных служб.
  2. Сервер 1С (рабочие процессы): для комфортной работы 10–20 пользователей рекомендуется выделить около 8–10 ГБ. Помните, что процессы rphost склонны к накоплению памяти при выполнении сложных запросов.
  3. SQL Server: остаток ресурсов отдаем под СУБД. В данном примере это 32 - 4 - 10 = 18 ГБ.

Для сервера с 64 ГБ оперативной памяти пропорции могут быть следующими:

Важное замечание: если вы используете 1С для небольшого количества пользователей (до 5–10 человек), серверу 1С можно оставить меньше памяти (например, 4–6 ГБ), отдав больше ресурсов SQL Server, что ускорит работу с кэшем базы данных.

Настройка политики Lock Pages in Memory (LPIM)

Выясним причину, по которой даже при установленных лимитах SQL Server иногда может работать медленно. Windows имеет механизм «агрессивного кэширования», который может попытаться забрать память у SQL Server для системного файлового кэша.

Чтобы предотвратить это, необходимо включить настройку Lock Pages in Memory (Блокировка страниц в памяти):

  1. Нажмите Win + R, введите secpol.msc и нажмите Enter.
  2. Перейдите в «Локальные политики» -> «Назначение прав пользователя».
  3. Найдите пункт Блокировка страниц в памяти.
  4. Добавьте в этот список учетную запись, под которой запускается служба SQL Server (например, NT Service\MSSQLSERVER).
  5. Перезапустите службу SQL Server.

Эта настройка запрещает операционной системе выгружать память SQL Server в файл подкачки, что существенно стабилизирует время отклика базы данных.

Особенности работы на десктопных ОС (Windows 10/11 LTSC)

Рассмотрим ситуацию, когда сервер развернут на базе Windows 10. В отличие от серверных редакций (Windows Server), десктопная ОС оптимизирована для работы с активными окнами, а не с фоновыми службами.

Чтобы сервер 1С и SQL работали эффективнее, выполните следующие действия:

  1. Откройте «Параметры системы» -> «О системе» -> «Дополнительные параметры системы».
  2. На вкладке «Дополнительно» в разделе «Быстродействие» нажмите «Параметры».
  3. На вкладке «Дополнительно» установите переключатель Оптимизировать работу служб, работающих в фоновом режиме.

Это изменит кванты времени процессора, выделяемые планировщиком ОС, что критически важно для серверных задач 1С.

Мониторинг эффективности: Page Life Expectancy

Как понять, достаточно ли памяти мы выделили SQL Server? Посмотрим на счетчик производительности SQLServer:Buffer Manager -> Page Life Expectancy (PLE).

Этот показатель отображает время (в секундах), в течение которого страница данных остается в оперативной памяти без повторного считывания с диска.

Ограничение памяти на стороне сервера 1С

Разберем, нужно ли ограничивать память самой 1С. Да, это крайне рекомендуется сделать через консоль администрирования серверов 1С:

  1. В свойствах рабочего сервера установите параметр Безопасный расход памяти за один вызов. Это предотвратит ситуацию, когда один отчет «съедает» всю память сервера.
  2. Настройте Максимальный объем памяти рабочих процессов. Рекомендуется ставить это значение на уровне 80–90% от того объема, который вы отвели серверу 1С в своих расчетах.

Например, если вы решили отдать под 1С 10 ГБ, установите лимит в консоли около 8.5 ГБ. При достижении этого порога сервер 1С перезапустит рабочий процесс, не дав ему обрушить всю систему по ошибке Out of memory.

Удаленная работа: VPN или Веб-сервер?

Проанализируем ситуацию с удаленным доступом. Если пользователи подключаются через VPN с каналом около 20 Мбит/с, работа через тонкий клиент будет вполне комфортной при низком пинге (до 10-15 мс). Однако, если канал нестабилен, рекомендуется опубликовать базу на веб-сервере (Apache или IIS).

Работа через веб-сервер по протоколу HTTP(S) более устойчива к задержкам сети, чем прямое TCP-подключение тонкого клиента к серверу 1С. При этом требования к памяти на самом сервере практически не изменятся, так как основную работу по-прежнему будут выполнять процессы rphost и sqlservr.

← На главную