Вопрос оптимального распределения оперативной памяти на сервере, где совместно работают MSSQL Server и сервер 1С, является одним из самых критичных для обеспечения стабильности системы. Часто можно встретить мнение, что современные СУБД способны самостоятельно управлять ресурсами, однако на практике это нередко приводит к критическим сбоям и деградации производительности. Разберем подробно, почему ограничение памяти необходимо и как правильно рассчитать лимиты для различных конфигураций оборудования.
Проанализируем алгоритм работы SQL Server. По умолчанию эта СУБД спроектирована так, чтобы захватывать максимально доступный объем оперативной памяти для своего Buffer Pool (кэша данных). Это делается с благой целью — минимизировать медленные операции чтения с диска, удерживая данные в RAM.
Однако в среде 1С, где на этой же машине часто запущены службы rphost (рабочие процессы 1С), возникает конфликт интересов. Рассмотрим, что происходит, если лимит не установлен:
Поэтому ограничивать SQL Server нужно всегда, даже если он является единственным тяжелым приложением на сервере. Это гарантирует операционной системе «пространство для маневра».
Основываясь на рекомендациях фирмы 1С и лучших практиках администрирования баз данных, рассмотрим базовую формулу. Мы должны оставить операционной системе достаточный объем памяти для внутренних нужд и сетевого стека.
Рекомендация по резервированию для ОС: необходимо оставлять примерно 1 ГБ оперативной памяти на каждые 16 ГБ установленной физической памяти, но не менее 2–4 ГБ в абсолютном выражении.
Если SQL Server работает на выделенном сервере (без 1С), формула настройки Max Server Memory будет выглядеть так:
[Общий объем RAM] - [Память для ОС (1 ГБ на каждые 16 ГБ)] = Лимит SQL
Ситуация усложняется, когда на одной машине (например, с 32 ГБ или 64 ГБ RAM) соседствуют и СУБД, и сервер приложений 1С. В этом случае мы должны разделить ресурсы между тремя потребителями: ОС, SQL и 1С.
Проанализируем пример для сервера с 32 ГБ оперативной памяти:
rphost склонны к накоплению памяти при выполнении сложных запросов.32 - 4 - 10 = 18 ГБ.Для сервера с 64 ГБ оперативной памяти пропорции могут быть следующими:
Важное замечание: если вы используете 1С для небольшого количества пользователей (до 5–10 человек), серверу 1С можно оставить меньше памяти (например, 4–6 ГБ), отдав больше ресурсов SQL Server, что ускорит работу с кэшем базы данных.
Выясним причину, по которой даже при установленных лимитах SQL Server иногда может работать медленно. Windows имеет механизм «агрессивного кэширования», который может попытаться забрать память у SQL Server для системного файлового кэша.
Чтобы предотвратить это, необходимо включить настройку Lock Pages in Memory (Блокировка страниц в памяти):
Win + R, введите secpol.msc и нажмите Enter.NT Service\MSSQLSERVER).Эта настройка запрещает операционной системе выгружать память SQL Server в файл подкачки, что существенно стабилизирует время отклика базы данных.
Рассмотрим ситуацию, когда сервер развернут на базе Windows 10. В отличие от серверных редакций (Windows Server), десктопная ОС оптимизирована для работы с активными окнами, а не с фоновыми службами.
Чтобы сервер 1С и SQL работали эффективнее, выполните следующие действия:
Это изменит кванты времени процессора, выделяемые планировщиком ОС, что критически важно для серверных задач 1С.
Как понять, достаточно ли памяти мы выделили SQL Server? Посмотрим на счетчик производительности SQLServer:Buffer Manager -> Page Life Expectancy (PLE).
Этот показатель отображает время (в секундах), в течение которого страница данных остается в оперативной памяти без повторного считывания с диска.
Разберем, нужно ли ограничивать память самой 1С. Да, это крайне рекомендуется сделать через консоль администрирования серверов 1С:
Например, если вы решили отдать под 1С 10 ГБ, установите лимит в консоли около 8.5 ГБ. При достижении этого порога сервер 1С перезапустит рабочий процесс, не дав ему обрушить всю систему по ошибке Out of memory.
Проанализируем ситуацию с удаленным доступом. Если пользователи подключаются через VPN с каналом около 20 Мбит/с, работа через тонкий клиент будет вполне комфортной при низком пинге (до 10-15 мс). Однако, если канал нестабилен, рекомендуется опубликовать базу на веб-сервере (Apache или IIS).
Работа через веб-сервер по протоколу HTTP(S) более устойчива к задержкам сети, чем прямое TCP-подключение тонкого клиента к серверу 1С. При этом требования к памяти на самом сервере практически не изменятся, так как основную работу по-прежнему будут выполнять процессы rphost и sqlservr.