Высокое значение Resource Monitor в sp_who2 (загрузка CPU больше 50%)

Время чтения - 7 мин.Дата публикации 06.05.2026

Оптимизация SQL Server: почему процесс RESOURCE MONITOR нагружает процессор и как это исправить

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

Кто такой RESOURCE MONITOR и почему он жрёт процессор?

RESOURCE MONITOR — это критически важный фоновый поток SQL Server, который управляет потреблением памяти. Его задачи:

  • Отслеживать сигналы операционной системы о нехватке физической памяти.
  • Координировать сокращение использования памяти различными компонентами (буферным пулом, кэшем планов, CLR и т.д.).
  • Предотвращать ситуации, когда SQL Server вытесняет память самой ОС и вызывает сбои или падение производительности всей машины.

Когда памяти действительно не хватает или лимит max server memory (MB) настроен неправильно, монитор ресурсов начинает интенсивно работать, вызывая постоянную высокую нагрузку на процессор. Его активность может измеряться десятками секунд в минуту, что становится заметно в системных представлениях и sp_who2.

Кроме того, в ряде версий SQL Server (особенно 2008 и 2012) существовали баги, приводившие к ложному «зацикливанию» этого потока даже при достаточном количестве RAM. Установка актуальных накопительных обновлений решает эту проблему.

Диагностика: быстро находим корень проблемы

1. Измеряем потребление CPU процессом RESOURCE MONITOR

Следующий скрипт в реальном времени вычисляет прирост процессорного времени (в секундах) за минуту. Если значение превышает 0.3 секунды на интервале ожидания 60 секунд — у вас явная проблема.

DECLARE @curCPU INT, @prevCPU INT, @delta INT, @msg VARCHAR(MAX)
SET @curCPU = 0
SET @prevCPU = 0
WHILE 1 = 1
BEGIN
    SELECT @curCPU = SUM(cpu_time)
    FROM sys.dm_exec_requests
    WHERE command LIKE '%Resource%Monitor%'

    SET @delta = @curCPU - @prevCPU
    SET @prevCPU = @curCPU

    SET @msg = CONVERT(VARCHAR(20), GETDATE(), 120) 
        + ' -- CPU delta sec (wait 60 sec, ignore first run): ' 
        + CAST(@delta / 1000.0 AS VARCHAR(MAX))
    RAISERROR(@msg, 10, 1) WITH NOWAIT

    WAITFOR DELAY '00:01:00'
END

Запустите скрипт в окне Management Studio и наблюдайте несколько итераций. Первое значение игнорируйте — оно вычисляется от нуля.

2. Проверяем настройки памяти SQL Server

Важнейший параметр — max server memory (MB). Он указывает, какой максимальный объём оперативной памяти разрешено занять SQL Server. В системном представлении sys.configurations его значение хранится уже в мегабайтах. Простое деление на 1024 здесь не требуется и даст неверный результат. Выполните корректный запрос:

SELECT 
    name,
    value AS Value_MB,
    CASE 
        WHEN name = 'max server memory (MB)' THEN 
            'Рекомендуется оставлять ОС минимум 2-4 ГБ или 10-20% от общего RAM'
        ELSE ''
    END AS Recommendation
FROM sys.configurations
WHERE name IN ('max server memory (MB)', 'min server memory (MB)')

Сравните полученное значение с общим объёмом физической памяти сервера. Если значение max server memory (MB) равно 2147483647 (по умолчанию), SQL Server «видит» всю доступную память сервера. Это опасно: в условиях дефицита ОС начнёт активно задействовать файл подкачки, а RESOURCE MONITOR попытается сжать память SQL Server — отсюда и рост CPU.

3. Проверяем файл подкачки (Pagefile)

Windows рекомендуется иметь файл подкачки размером от 1,5 до 3 раз больше объёма ОЗУ, особенно на 32‑разрядных версиях SQL Server. Недостаточный или отсутствующий файл подкачки усугубляет дефицит памяти и провоцирует монитор ресурсов. Проверьте настройки через свойства системы: Панель управления → Система → Дополнительные параметры системы → Быстродействие → Дополнительно → Виртуальная память.

Как вылечить проблему: от срочной помощи к долгосрочному решению

Шаг 1. Срочные меры (reaction)

  • Увеличьте лимит max server memory (MB). Если мониторинг показал, что памяти выделено мало или вообще используется значение по умолчанию, а на сервере есть свободная RAM, сразу скорректируйте настройку.
    EXEC sp_configure 'show advanced options', 1
    RECONFIGURE
    EXEC sp_configure 'max server memory (MB)', 16384  -- пример: 16 ГБ
    RECONFIGURE
    Значение подбирайте так, чтобы операционной системе оставалось не менее 2–4 ГБ (или 10–20 % от общего объёма). Например, на сервере с 32 ГБ ОЗУ безопасно установить 26–28 ГБ.
  • Добавьте физической памяти. Если свободного RAM нет, а SQL Server использует всю доступную память, установка дополнительных планок — единственный способ избежать проблем. Это особенно актуально для систем с высокими нагрузками и большим количеством одновременно обслуживаемых баз данных.
  • Плановый перезапуск экземпляра SQL Server. Иногда счётчик процессорного времени накручивается из‑за внутреннего бага, и простая остановка/запуск службы сбрасывает состояние. Конечно, это требует окна обслуживания и полного перерыва в работе всех баз данных. Перед перезапуском убедитесь, что ваши задачи и подключения завершены.

Шаг 2. Стратегическое решение (профилактика)

  • Обновите SQL Server. Проблема аномальной активности RESOURCE MONITOR официально зафиксирована и исправлена в следующих обновлениях:
    • SQL Server 2008 RTM → CU6, SP1 → CU4
    • SQL Server 2012 → последующие накопительные обновления (CU)
    На SQL Server 2014 и выше подобные баги практически не встречаются. Тем не менее, всегда рекомендуется ставить последний пакет обновления (SP) или кумулятивный апдейт (CU), так как они содержат и множество других исправлений.
  • Выделите SQL Server достаточно памяти. Никогда не оставляйте max server memory (MB) равным значению по умолчанию на продакшн-сервере. Жёстко зарезервируйте операционной системе её долю. Это предотвращает «потогонку» между SQL Server и Windows за ресурсы.
  • Контролируйте нагрузку. Не запускайте на том же физическом или виртуальном сервере другие ресурсоёмкие приложения (веб-серверы, службы Reporting Services со сложной обработкой, антивирусы в режиме глубокого сканирования). Они могут отнимать память у SQL Server и вызывать нежелательную реакцию монитора ресурсов.

Практические выводы и регулярная профилактика

  • Настройка памяти: Всегда явно задавайте max server memory (MB), оставляя ОС не менее 10–20 % или 2–4 ГБ RAM.
  • Регулярный мониторинг: Раз в месяц (или чаще на критичных системах) проверяйте значение max server memory (MB) через sys.configurations и запускайте скрипт замера дельты CPU для процесса RESOURCE MONITOR. Быстрый рост нагрузки станет ранним индикатором проблем с памятью.
  • Своевременное обновление: Устанавливайте актуальные пакеты обновлений и кумулятивные апдейты согласно политике ИБ и рекомендациям Microsoft. Это самый надёжный способ закрыть известные баги, включая агрессивного «пожирателя» CPU.
  • Документируйте изменения. Перед корректировкой параметров памяти или отключением сервера фиксируйте текущие значения, чтобы иметь возможность отката при непредвиденных последствиях.

Заключение

Высокая загрузка процессора фоновым процессом RESOURCE MONITOR — это не просто график в мониторинге, а прямое указание на то, что SQL Server борется за оперативную память. Не игнорируйте этот сигнал. Быстро проведите диагностику, настройте лимит памяти, при необходимости добавьте физического RAM и обязательно обновите экземпляр до последней поддерживаемой сборки. Эти простые шаги не только решат проблему «прожорливого» процесса, но и в целом повысят стабильность и производительность ваших баз данных.

Если после выполнения описанных действий проблема сохраняется, стоит углубиться в анализ конкретных запросов и общего распределения памяти, но стартовая точка теперь у вас есть.

Насколько полезной была статья?

Что еще посмотреть по SQL Server

SQL Management Studio медленно работает, тормозит. Как решить проблему

Ошибки в SQL запросах и хранимых процедурах

Не запускается Configuration Manager

Решение проблем MS SQL Server с блокировками

Решение ошибки Cannot resolve the collation conflict between

SQL. Ошибка. Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

SQL. Получение null при конкатенации (объединении) строк

SQL. Проблема с доступом к таблице БД

SQL Server. Ошибка Table:String or binary data would be truncated. The statement has been terminated.

Сколько памяти использует SQL Server

Проблема Не получается сделать take offline для базы данных

Не создается диаграмма в SQL Server. Ошибка при создании диаграмм БД

Дополнительный заработок для разработчиков на T-SQL

Прямая работа с заказчиками как ИП или самозанятый. Нужно знать только SQL и HTML.
Falcon Space - платформа для создания сайтов с личными кабинетами
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Запрос расчета стоимости веб-проекта на базе Falcon Space
Если видео Youtube плохо грузится, то попробуйте найти видео в ВК видео на канале Falcon Space
Сайт использует Cookie, Яндекс Метрику. Используя сайт, вы соглашаетесь с правилами сайта. См. Правила конфиденциальности и Правила использования сайта OK