Как ограничить аппетиты sqlservr.exe и оптимизировать работу оперативной памяти?

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

Многие администраторы 1С сталкиваются с ситуацией, когда процесс sqlservr.exe постепенно занимает весь доступный объем оперативной памяти на сервере. Это поведение заложено в архитектуру самого SQL Server, однако, когда система начинает испытывать дефицит ресурсов, возникают ошибки, такие как сбои при выполнении метода ПоместитьВоВременноеХранилище. Рассмотрим подробнее, как приручить этот «аппетит» и настроить сервер для стабильной работы.

Принципы работы SQL Server с памятью

Важно понимать, что sqlservr.exe спроектирован так, чтобы использовать максимум доступной оперативной памяти для кэширования данных. Это необходимо для ускорения доступа к информации: чем больше данных хранится в буферном кэше, тем реже сервер обращается к медленному жесткому диску. Однако, если на одном сервере с SQL установлены другие критически важные компоненты (например, сервер 1С, терминальный сервер или другие приложения), такой подход может привести к нехватке памяти для них. Мы рекомендуем сбалансировать это распределение вручную.

Пошаговая настройка ограничения памяти

Для того чтобы ограничить максимальный размер памяти, которую может использовать sqlservr.exe, воспользуемся средствами SQL Server Management Studio. Выполним следующие шаги:

  1. Откройте SQL Server Management Studio и подключитесь к экземпляру вашего сервера.
  2. В «Обозревателе объектов» нажмите правой кнопкой мыши на имя сервера.
  3. Выберите пункт «Свойства» (Properties).
  4. В открывшемся окне перейдите на вкладку «Память» (Memory).
  5. В поле «Максимальный размер памяти сервера» (Maximum server memory) укажите значение в мегабайтах, которое вы готовы выделить для нужд SQL.
  6. Сохраните изменения, нажав кнопку «ОК».

Как рассчитать объем памяти для SQL Server

Если на одном физическом сервере запущены SQL, сервер 1С и терминальные сессии, нужно подходить к расчету ответственно. Рассмотрим пример для сервера с 16 Гб оперативной памяти:

При наличии, например, 15 активных пользователей, расчет будет выглядеть так: 16 Гб - 1 Гб (ОС) - 500 Мб (1С) - 3 Гб (пользователи) = 11,5 Гб. Именно этот объем мы можем безопасно доверить sqlservr.exe.

Решение ошибок типа «ПоместитьВоВременноеХранилище»

Часто ошибки в работе 1С возникают не из-за настроек SQL, а из-за исчерпания ресурсов на стороне самого сервера 1С. Если вы столкнулись с ошибкой нехватки памяти при выполнении тяжелых операций, выполним следующие рекомендации:

  1. Проверка процессов rphost.exe: В консоли администрирования серверов 1С проверьте параметры «Безопасный расход памяти за один вызов» и «Объем памяти рабочих процессов до аварийного завершения». Если эти лимиты установлены слишком низко, сервер будет завершать процессы, вызывая ошибки у пользователей.
  2. Анализ запросов: Если sqlservr.exe потребляет чрезмерное количество ресурсов, это может быть следствием выполнения неоптимальных запросов 1С. Проанализируйте «тяжелые» запросы с помощью профилировщика, чтобы убедиться, что они не вызывают полное сканирование таблиц вместо использования индексов.
  3. Минимальный размер памяти: Рекомендуем установить параметр «Минимальный размер памяти сервера» (Minimum server memory), чтобы SQL сразу резервировал определенный объем (например, 4-8 Гб). Это предотвратит «дребезг» памяти и позволит SQL работать стабильнее при старте системы.

Заключение: мониторинг — ваш главный союзник

Помните, что жесткое ограничение памяти — это вынужденная мера. Если после установки лимитов в SQL Server Management Studio вы заметите снижение производительности, стоит проверить счетчик Page Life Expectancy. Если время жизни страницы в кэше постоянно падает ниже 300 секунд, значит, SQL вынужден постоянно «сбрасывать» данные на диск, и вам необходимо пересмотреть политику распределения ресурсов в пользу увеличения лимита для SQL Server.

← На главную