У нас есть база данных со смешанной рабочей нагрузкой OLAP / OLTP. Запросы являются специальными и динамически создаются на сервере приложений среднего уровня. Когда мы запускаем сервер, производительность вполне приемлема, но потребление памяти увеличивается, пока не будет исчерпана вся доступная память (30 ГБ). После этого система становится все медленнее и медленнее.
Команды вроде Dbcc freeproccache
не действуют.
В нем не так много транзакций select * from sys.dm_tran_session_transactions
(не больше, чем когда система в порядке), иногда этот список пуст.
Первый результат dbcc memorystatus
IS
VM Reserved 42136628
VM Committed 1487176
Locked Pages Allocated 24994048
Reserved Memory 1024
Reserved Memory In Use 0
Перезапуск SQL Server на некоторое время решает проблему.
- Что вызывает это поведение? Как этого можно избежать?
- Если реальное решение проблемы слишком сложно, существует ли команда, которая заставляет SQL Server фактически освободить всю память без полного перезапуска СУБД?
Сервер работает на выделенном оборудовании (не виртуальной машине). У нас было несколько запланированных рабочих мест, но мы отключили их на некоторое время без изменений. На том же сервере выполняются другие приложения среднего уровня, но они используют не более 2 ГБ памяти, незначительное использование ЦП и почти не требуют ввода-вывода. Мы перезапустили все такие приложения без изменений.